linux - 通过容器使用 docker 守护进程时在 docker-compose 中安装相关文件夹?

标签 linux docker jenkins docker-compose docker-in-docker

我们之前在 Docker in Docker 中运行 Jenkins (DIND) 模式,即在 Jenkins docker 容器内运行 docker 守护进程。但是由于许多问题(其中一些在上面的链接中有描述),我们决定放弃这种方法,而是让容器使用主机守护进程,只需在启动容器时将其挂载为卷即可:

-v /var/run/docker.sock:/var/run/docker.sock

但是现在我们在使用 Docker Compose 挂载相对路径时遇到了问题它在 容器 中启动,在 DIND 模式下运行良好。考虑这个 docker-compose 文件:

myimage:
  build: .
  environment:
     LANG: C.UTF-8     
  working_dir: /code
  volumes:
    - ../../../:/code
    - ~/.m2/repository:/root/.m2/repository
    - ~/.gradle:/root/.gradle

以前这会从 container 安装所有文件夹,例如 ../../../ 文件夹,但现在它似乎试图从 container 安装它们主持人。当我检查主机上的目录结构时,似乎 docker-compose 已经从容器中复制了目录结构,然后尝试挂载该文件夹,使其为空。

所以我的问题是,当从主机使用 docker 守护进程时,如何在 Docker Compose 中挂载相对路径?

最佳答案

您需要确保您主机上的相对路径与您的 Jenkins 容器内的相对路径相同,这样才能正常工作。

这并不是真正的相对路径,docker-compose 正在尽最大努力将相对路径转换为 ​​docker 主机所需的绝对路径。所有路径都在 docker 主机上进行评估以创建一个新容器,它不知道您正在远程或在容器内部运行 docker 客户端,也不知道您当前所在的目录。

作为另一种选择,您可能需要考虑切换到命名卷并在 Jenkins 容器中映射与其他容器中相同的命名卷。

关于linux - 通过容器使用 docker 守护进程时在 docker-compose 中安装相关文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47870853/

相关文章:

azure - Jenkins - 无法创建用户数据目录 :/var/lib/jenkins/snap/docker/: Read-only file system

macos - 无法让docker在Mac上工作

node.js - 如何在 Dockerfile.template 中的 `tsc` 之前运行 TypeScript `COPY`?

tomcat - Jenkins 部署插件失败

jenkins - 如何将kubernetes云插件与jenkins集成

linux - Centos 上的 zip 命令不保留法语特殊字符

python - 使用带有 sudo 的 Python 模块

c - UDP - 多服务器单客户端

linux - Grep 查找文本文件中的特定数字并按数字文本文件输出

java - 为什么 .settings 文件丢失