【问题标题】:Share a data volume between two docker containers在两个 docker 容器之间共享一个数据卷
【发布时间】:2017-02-20 11:02:55
【问题描述】:

我在 Windows 10 上使用 Docker 版本 1.13.1,build 092cba3。

我有一个自定义的 Jenkins 容器,它从 Github 以卷的形式构建代码。

音量为/var/jenkins_home/workspace/myjob

我还有一个 Apache 容器,我想与之共享卷。

docker-compose.yml 文件是:

version: '2'

services:

  jenkins:
    container_name: jenkins
    image: jenkins:v1
    environment:
      JAVA_OPTS: "-Djava.awt.headless=true"
      JAVA_OPTS: "-Djenkins.install.runSetupWizard=false" # Start jenkins unlocked
    ports:
  #    - "50000:50000" # jenkins nodes
      - "8686:8080" # jenkins UI
    volumes:
      - myjob_volume:/var/jenkins_home/workspace/myjob

  apache:
    container_name: httpd
    image: httpd:2.2
    volumes_from:
      - jenkins

volumes:
  myjob_volume:

我基本上希望 Jenkins 容器获取卷中的代码,然后 Apache (httpd) 容器可以看到该代码。因此,我从 IDE 对代码所做的每一次更改并推送到 Github,都将在 Apache 容器中可见。卷是在Apache容器中创建的,但是当我在Jenkins容器中成功构建代码时,它并没有出现在Apache中的卷中。

编辑: 使用docker-compose up -d 启动两个容器后,

  • 我从 Kitematic 启用了他们的卷
  • 我将 Apache 的卷路径更改为指向 Jenkins 卷
  • 当我从 Jenkins 构建代码时,Apache 会如我所愿。

那么...我应该如何从docker-compose 文件中执行相同的操作?

【问题讨论】:

    标签: apache jenkins docker docker-compose docker-volume


    【解决方案1】:

    您正在使用 volumes_from 从您指定的容器中“复制”安装定义。因此,myjob_volume 将安装在 Apache 容器内的/var/jenkins_home/workspace/myjob。来自 Docker hub (https://hub.docker.com/_/httpd/) 的官方 Apache 镜像使用 /usr/local/apache2/htdocs/ 作为 webroot。

    要在该位置安装卷,请将 docker-compose 文件更新为如下所示;

    version: '2'
    
    services:
    
      jenkins:
        container_name: jenkins
        image: jenkins:v1
        environment:
          JAVA_OPTS: "-Djava.awt.headless=true"
          JAVA_OPTS: "-Djenkins.install.runSetupWizard=false" # Start jenkins unlocked
        ports:
      #    - "50000:50000" # jenkins nodes
          - "8686:8080" # jenkins UI
        volumes:
          - myjob_volume:/var/jenkins_home/workspace/myjob
    
      apache:
        container_name: httpd
        image: httpd:2.2
        volumes:
          - myjob_volume:/usr/local/apache2/htdocs/
    
    volumes:
      myjob_volume:
    

    【讨论】:

    • 必须是/usr/local/apache2/htdocs/ 吗?不能只是像/var/test 这样的东西吗?
    • 当然,这应该是可能的,但您必须为 apache 提供自定义配置文件
    • 这个答案中的示例与official documentation中的双服务设置data-volume示例基本相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 2019-03-11
    相关资源
    最近更新 更多