在两个docker容器之间共享数据卷

时间:2017-02-20 11:02:56

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

我使用Docker版本1.13.1,在Windows 10上构建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中的代码所做的每一次更改都会在Apache容器中显示,并且推送到Github。该卷是在Apache容器中创建的,但是当我在Jenkins容器中成功构建代码时,它不会出现在Apache的卷中。

修改 使用docker-compose up -d

启动2个容器后
  • 我从Kitematic
  • 启用了他们的音量
  • 我将Apache的卷路径更改为指向Jenkins卷
  • 当我从Jenkins构建代码时,Apache会按照我的意愿看待它。

那么......我应该如何从docker-compose文件中做同样的事情?

1 个答案:

答案 0 :(得分:1)

您正在使用volumes_from从您指定的容器中“复制”装载定义。因此,myjob_volume将安装在Apache容器内的/var/jenkins_home/workspace/myjob。 Docker中心(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: