无法让 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 一起使用