当前位置: 首页 > 知识库问答 >
问题:

如何让docker-compose使用存储库中的最新图像

聂和宜
2023-03-14

我为此创建了一个简单的测试项目,其中唯一的目标是获得一个版本nr以在每个新构建中增加。如果我浏览到创建的nginx服务器,就会显示版本nr(这在本地按预期工作)。

docker版本:1.11.2 docker-compose版本:1.7.1操作系统:使用docker-toolbox在CentOS 7和OS X 10.10上进行了测试

My Docker-compose.yml:

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
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
docker-compose pull && docker-compose -f docker-compose.yml up -d

在我计算机上的一个文件夹中,其中的内容只有docker-compose.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命令,使新版本按预期显示在屏幕上。

目标是让我们的构建过程构建并创建docker-compose.yml中所需的映像的标记版本,将这些映像推送到我们的私有注册表,然后进行“发布到生产-步骤”,将docker-compose.yml简单地复制到生产服务器,并运行docker-compose pull&&docker-compose-f docker-compose.yml up-d,以便在生产中启动新映像。如果任何人有这方面的提示,或可以指出这类设置的最佳实践教程,这将是非常感谢的。

共有1个答案

郜杰
2023-03-14

为了确保使用注册表(例如docker hub)中的:latest标记的最新版本,还需要再次提取最新标记。如果更改了,当您再次docker-compose up时,将下载并启动diff。

所以我们应该这样做:

docker-compose stop
docker-compose rm -f
docker-compose pull   
docker-compose up -d

我将其粘贴到一个映像中,运行该映像以启动docker-compose,并确保映像保持最新:https://hub.docker.com/r/stephanlindauer/docker-compose-updater/

 类似资料:
  • 问题内容: 我不知道自己在做什么错,但是如果不先从系统中完全删除旧容器,就无法从注册表中使用最新映像。即使docker- compose pull已获取较新的映像,它似乎仍在使用先前启动的映像。 我研究了如何使docker-compose始终从新映像重新创建容器?这似乎与我的问题类似,但是那里提供的解决方案都不适合我,因为我正在寻找可以在生产服务器上使用的解决方案,因此我不想在启动它们之前先删除所

  • 问题内容: 我正在使用docker-compose命令运行多个容器。问题是我的docker- compose必须从公共存储库中提取一些图像,并从私有存储库中提取一些图像。我打算做的是将所有必需的映像推送到私有存储库,但是如何使docker- compose从私有存储库中提取映像。 简而言之->当图像仅在那里可用时,如何指向私有存储库 问题答案: 使用命令。(官方文件) 输入您的凭据,然后,只有拥有

  • 我有一篇docker文章。yml,我有一个Postgres数据库,Grafana在上面运行以查询数据。 我用命令docker compose up启动这个compose,但是如果我不想丢失任何数据,我必须运行docker compose stop,而不是docker compose down。 我还阅读了,但“提交操作将不包括安装在容器内的卷中包含的任何数据”,所以我想它对我的需求没有用。 存储创

  • 我有多个微服务,我使用docker compose进行开发部署。当microservices代码库中有一些更改时,我会触发ci作业来重新部署它们。我有下面的脚本来做这件事。但每次我都必须从头开始构建所有图像,然后运行它们。完成所有这些操作后,我得到了图像。所以我使用最后一个脚本来删除它们。你有什么建议使这个过程更实用?是否有任何方法可以更新现有图像而不使用新的更改将其删除? 其他信息:我正在使用

  • Docker Hub从这个源repo为我构建了一个Syncthing映像。 我标记了最新的提交v0。13.5,但Docker建造了两次:一次用于最新版本,一次用于v0。13.5. 为什么?它不应该能够找出源是相同的吗?我只是在我的Dockerfile中做了一些愚蠢的事情,破坏了缓存吗?我是否需要向Docker Hub暗示这应该是两个具有相同校验和但不同标签的图像? 我想到了两个Docker图像标签

  • 我想通过docker compose构建图像,并为其设置特定标记。文件说: Comment将构建并用生成的名称标记它,然后使用该映像。 但是我找不到指定标签的方法,对于构建的图像,我总是看到“最新”标签。