我对卷在Docker中的工作方式不太了解。我有两个单独的图像:一个用于构建javascript捆绑包,另一个用于将其部署到S3。我正在Codeship上进行所有操作,但我相信它们的codeship-steps.yml文件是与docker-compose兼容的。因此,我认为这并非特定于Codeship,但我可能是错的。
我在两个容器中都安装了一个卷,并且能够从写在“ write-artifact”容器中的“ read-artifact”容器中读取工件,如下所示:
场景1
# codeship-steps.yml
- name: write-artifact
service: write-artifact
command: /bin/bash -c "echo hi > /styleguide/hello.txt"
- name: read-artifact
service: read-artifact
command: cat /styleguide/hello.txt # this reads "hi"
# codeship-services.yml
write-artifact:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./tmp:/styleguide
read-artifact:
image: busybox
volumes_from:
- read-artifact
我可以从第二个容器中正确读取文件的内容。
但是,我要在第一个容器中运行一个npm脚本,并可以从seconds容器访问那些构建的资产。但是,当运行将资产捆绑到同一目录的npm脚本时,该目录显示为空。
场景2
# codeship-steps.yml
- name: write-artifact
service: write-artifact
command: /bin/bash -c "npm run build"
- name: read-artifact
service: read-artifact
command: ls -a /styleguide # this is empty
# codeship-services.yml (same as scenario 1)
write-artifact:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./tmp:/styleguide
read-artifact:
image: busybox
volumes_from:
- read-artifact
我希望能够访问第二个容器中的已建资产,以便我可以仅使用该容器进行部署,而仅使用第一个容器进行构建。