无法让 Docker 在 Docker 之外与 ECS 中的 Jenkins 一起工作

Posted

技术标签:

【中文标题】无法让 Docker 在 Docker 之外与 ECS 中的 Jenkins 一起工作【英文标题】:Can't get Docker outside of Docker to work with Jenkins in ECS 【发布时间】:2019-06-19 18:14:04 【问题描述】:

我正在尝试将 Jenkins Docker 映像部署到 ECS 并让 docker-compose 在我的管道内工作。

为了让这个 Jenkins 容器启动并运行,我遇到了又一堵墙。大多数问题只是让 docker 命令在管道内工作(包括正确获取权限/组)。

我已经明白该命令有效并使用主机 docker 套接字(docker ps 输出 jenkins 容器和 ecs 代理)并且 docker-compose 正在工作(docker-compose --version 有效)但是当我尝试运行时任何涉及管道内文件的内容,我都会收到“没有这样的文件或目录”错误。当我运行 docker-compose -f docker-compose.testing.yml up -d --build (它找不到 yml 文件)以及当我尝试运行基本的 docker build 时,会发生这种情况,它找不到COPY 命令中使用的本地文件(即 COPY ./app)。我尝试将命令更改为 ./file.yml 和 $PWD/file.yml ,但仍然出现相同的错误。

这是我的 Jenkins Dockerfile:

FROM jenkins/jenkins:lts

USER root

RUN apt-get update && \
    apt-get install -y --no-install-recommends curl

RUN apt-get remove docker
RUN curl -sSL https://get.docker.com/ | sh

RUN curl -L --fail https://github.com/docker/compose/releases/download/1.21.2/run.sh -o /usr/local/bin/docker-compose
RUN chmod +x /usr/local/bin/docker-compose
RUN groupadd -g 497 dockerami \
  && usermod -aG dockerami jenkins

USER jenkins

COPY plugins.txt /usr/share/jenkins/ref/plugins.txt

COPY jobs /app/jenkins/jobs

COPY jenkins.yml /var/jenkins_home/jenkins.yml

RUN xargs /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt

RUN echo 2.0 > /usr/share/jenkins/ref/jenkins.install.UpgradeWizard.state

ENV CASC_JENKINS_CONFIG /var/jenkins_home/jenkins.yml

我还让 Terraform 构建任务定义并将 /var/run/docker.sock 从主机绑定到 jenkins 容器。

我希望这项工作能够发挥作用,因为自从大约 2 年前我们开始使用 Jenkins 以来,我就一直喜欢它,并且我已经在我们的非容器化 Jenkins 安装中让这些管道与 docker-compose 一起工作,但是让 Jenkins 容器化了远远一直在拔牙。我更愿意让它工作,而不是现在必须将我的工作流程更改为 Concourse 或 Drone 之类的东西。

【问题讨论】:

【参考方案1】:

您在 Dockerfile 中遇到的一个问题是您正在将文件复制到 /var/jenkins_home 中,该文件将消失,因为 /var/jenkins_home 被定义为父 Jenkins 映像中的卷以及您复制到卷中的任何文件 卷被声明后被丢弃 - 见https://docs.docker.com/engine/reference/builder/#notes-about-specifying-volumes

【讨论】:

以上是关于无法让 Docker 在 Docker 之外与 ECS 中的 Jenkins 一起工作的主要内容,如果未能解决你的问题,请参考以下文章

Jhipster - 在 docker 主机上部署除网关本身、混合 Docker 和本地部署之外的所有内容时,无法使用网关应用程序

代理套接字 io 无法与 nginx、docker 上的节点连接

使用 Cisco *** AnyConnect 时无法让 docker-machine 与 virtualbox 一起使用

无法让 docker healthcheck 与 ECS Fargate v 1.4.0 一起使用

无法运行简单的 jenkins docker node build(当前不支持 /home 之外的主目录)

无法让 SSL 在 Docker 容器中工作