【发布时间】:2020-05-16 10:10:22
【问题描述】:
我有以下容器:
nginx:latest-
myapp容器(源自 php-fpm:alpine)
目前我有一个带有 CI 管道的虚拟项目,它在构建时编译资源的生产变体(图像/js/css,...)。构建文件最终位于 (/public/build) 中。在 CI 管道的最后,我将所有内容打包成 Docker 镜像并上传到 Hub。
nginx 和 myapp 都设置了卷(不是绑定挂载)并指向 /opt/ci-test/public/build。
这是第一次。
但假设我添加了一个新文件 new.css - 我的新版本 docker 映像将包含 new.css 的构建变体。
运行具有预先存在的卷的新容器不会显示新文件我知道它不应该。。我可以创建一个新卷my_app_v2。
此时nginx 看不到这个新卷,必须将其删除并重新运行(使用新卷)才能生效。
有没有简单的方法可以克服这个问题?
我的意图是为多个 PHP 应用程序使用 nginx 容器,并且每当我更新其中一个正在服务的应用程序时,我都需要避免杀死它。这是一个糟糕的决定吗?
编辑:
我设法挖掘出的一种解决方法是从附加卷中删除所有文件并启动新的myapp 容器。这会将所有最新文件镜像到卷。但这感觉很脏……
编辑2:
相关问题(案例3):https://github.com/moby/moby/issues/18670#issuecomment-165059630
EDIT3:
Dockerfile
FROM php:7.2.30-fpm-alpine3.11
COPY . /opt/ci-test
WORKDIR /opt/ci-test
VOLUME /opt/ci-test/public/build
到目前为止,我没有docker-composer,我通过命令手动运行容器:
docker run -it -d --name php71alp -v shr_test:/opt/ci-test/public/build -p 9000:9000 <myaccount>/citest
docker run -it -d --name nginx -v shr_test:/var/www/citest -p 80:80 nginx:latest
【问题讨论】:
-
你在使用 docker-compose 吗?你能说说你的环境怎么样?
-
发布您的
docker-compose和Dockerfile详细信息 -
大家好,很抱歉延迟回答。 @Dilson:我仍然不使用
docker-compose,所以我通过docker run命令同时运行nginx和我的容器。 @Tarun:我为我的应用添加了Dockerfile。这真的很简单,因为它是用于 POC 目的的测试图像。谢谢!