我不知道我做错了什么,但我只是不能让 docker-compose up
使用我们的注册表中的最新映像,除非首先从系统中完全删除旧的容器。看起来构图正在使用之前启动的图像,尽管 docker-compose pull 已经获取了一个较新的图像。
我查看了 如何得到码头组合始终重新创建容器从新的图像?,它似乎与我的问题相似,但是没有一个提供的解决方案适合我,因为我正在寻找一个可以在生产服务器上使用的解决方案,在那里我不想在重新启动它们之前删除所有容器(可能的数据丢失?).我想合成只是为了检测新版本的更改图像,拉他们,然后重新启动与这些新图像的服务。
我为此创建了一个简单的测试项目,其中唯一的目标是在每个新版本上增加一个 nr 版本。如果我浏览到创建的 nginx 服务器,就会显示 nr 版本(这在本地正常工作)。
Docker 版本: 1.11.2 Docker-compose 版本: 1.7.1 OS: 使用 docker-toolbox 在 CentOS 7和 OS X 10.10上进行了测试
我的码头作品:
version: '2'
services:
application:
image: ourprivate.docker.reg:5000/ourcompany/buildchaintest:0.1.8-dev
volumes:
- /var/www/html
tty: true
nginx:
build: nginx
ports:
- "80:80"
volumes_from:
- application
volumes:
- ./logs/nginx/:/var/log/nginx
php:
container_name: buildchaintest_php_1
build: php-fpm
expose:
- "9000"
volumes_from:
- application
volumes:
- ./logs/php-fpm/:/var/www/logs
在我们的 Jenkins 服务器上,我运行以下命令来构建和标记图像
cd $WORKSPACE && PROJECT_VERSION=$(cat VERSION)-dev
/usr/local/bin/docker-compose rm -f
/usr/local/bin/docker-compose build
docker tag ourprivate.docker.reg:5000/ourcompany/buildchaintest ourprivate.docker.reg:5000/ourcompany/buildchaintest:$PROJECT_VERSION
docker push ourprivate.docker.reg:5000/ourcompany/buildchaintest
这似乎正在做它应该做的事情,因为每次构建完成并且版本 nr 被改变时,我都会在我们的存储库中获得一个新的 version 标记。
如果我现在逃跑
docker-compose pull && docker-compose -f docker-compose.yml up -d
在我电脑上的一个文件夹,其中的内容只是码头-组成。Yml 和构建 nginx 和 php 服务所必需的 Dockerfiles,我得到的输出不是注册表中标记的最新版本号,也不是 docker-compose 中显示的最新版本号。Yml (0.1.8) ,但是之前的版本是0.1.7。然而 pull 命令的输出将表明获取了新版本的图像:
Pulling application (ourprivate.docker.reg:5000/ourcompany/buildchaintest:latest)...
latest: Pulling from ourcompany/buildchaintest
Digest: sha256:8f7a06203005ff932799fe89e7756cd21719cccb9099b7898af2399414bfe62a
Status: Downloaded newer image for docker.locotech.fi:5000/locotech/buildchaintest:0.1.8-dev
除非我逃跑
docker-compose stop && docker-compose rm -f
然后运行 docker-compose up
命令,我得到的新版本显示在屏幕上的预期。
这是码头作业的预期行为吗?也就是说,在再次运行 up
之前,我是否应该总是执行 docker-compose rm -f
,即使是在生产服务器上?还是我做了什么违背常理的事所以才没用?
我们的目标是让我们的构建过程构建和创建标记版本的图像需要在一个 docker-撰写。Yml,将它们推送到我们的私有注册中心,然后“ release to production-step”就可以简单地复制 docker-compest。Yml 发送到生产服务器,并为要在生产中启动的新映像运行 docker-compose pull && docker-compose -f docker-compose.yml up -d
。如果有人有这方面的建议,或者可以指出这种设置的最佳实践教程,也会非常感激。