Docker swarm 相同图像不同版本

Docker swarm same image different build

我正在使用 Docker 版本 19.03.3 和 docker 群,以及 docker 注册表。 我想知道如何使用相同的图像但具有不同的构建。

我的 swarm.yml :

version: '3'
services:

        db:
                image: 127.0.0.1:5000/postgres:11.5
                build: docker-compose.d/postgres
                environment:
                        - PG_MAX_WAL_SENDERS=8
                        - PG_WAL_KEEP_SEGMENTS=8
                        - PGDATA=/var/lib/postgresql/data/pgdata
                        - POSTGRES_USER=user
                        - POSTGRES_PASSWORD=password

                deploy:
                 placement:
                   constraints:
                       - node.role == manager
        db-slave:
                build: docker-compose.d/postgres/slave
                image: 127.0.0.1:5000/postgres:11.5
                environment:
                        - PGDATA=/var/lib/postgresql/data/pgdata
                        - REPLICATE_FROM=db
                        - POSTGRES_USER=user
                        - POSTGRES_PASSWORD=password

                deploy:
                 placement:
                   constraints:
                       - node.role == manager
                depends_on:
                        - db

docker 图片:

127.0.0.1:5000/postgres   11.5                839a428f8eac        4 days ago          848MB
127.0.0.1:5000/postgres   <none>              e5636a8fc5f0        4 days ago          848MB
127.0.0.1:5000/postgres   <none>              6c1932b5707c        4 days ago          848MB
postgres                  11.5                5f1485c70c9a        5 days ago          293MB
registry                  <none>              f32a97de94e1        7 months ago        25.8MB

docker 文件数据库:

FROM postgres:11.5
COPY ./cluster/ /docker-entrypoint-initdb.d/
RUN apt-get update -y
RUN apt-get install postgis -y

docker 文件 db-slave:

FROM postgres:11.5
RUN apt-get update -y
RUN apt-get install postgis iputils-ping -y
COPY setup-replication.sh /docker-entrypoint-initdb.d/
COPY docker-entrypoint.sh /docker-entrypoint.sh
COPY postgres.sql /docker-entrypoint-initdb.d/
RUN chmod +x /docker-entrypoint-initdb.d/setup-replication.sh /docker-entrypoint.sh

他们都从注册表镜像 postgres:11.5,这就成了问题 因为我确实想在两者上都使用 postgres 11.5,但是要使用不同的构建,因为我需要对它们执行不同的构建过程。一个正在复制一个文件,另一个不是。(例如) 我该怎么做?

注册表将两个构建保存为一个 postgres:11.5

两者具有相同的名称,因为您使用的是相同的 image: 127.0.0.1:5000/postgres:11.5

image 在此上下文中是结果图像的名称,而不是基础图像的名称。

所以,基本上将它们更改为:

        db:
                image: 127.0.0.1:5000/db          <--------
                build: docker-compose.d/postgres
        db-slave:
                build: docker-compose.d/postgres/slave
                image: 127.0.0.1:5000/db-slave <--------

另请注意,这适用于 docker-compose。 Docker swarm 无法构建容器,只能部署已经预构建的镜像。