docker-compose - 具有相同服务的多个容器
docker-compose - Multiple containers with same service
我想创建 2 个除了环境变量外设置几乎相同的容器。
尝试了几件事都没有成功,尤其是 .override.yml(将多个 .yml 传递给 docker-compose 覆盖前一个)。
# docker-compose.yml
version: '3.7'
services:
web:
image: nginx
container_name: test-web
ports:
- 80:80
现在另一个
# docker-compose.override.yml
version: '3.7'
services:
web:
container_name: dupe-web
ports:
- 8080:80
正在做:
$ docker-compose -f docker-compose.yml -f docker-compose.override.yml up -d
Recreating test-web ... done
杀死 test-web
容器并启动新名称 dupe-web
。
有没有办法让两者都使用相同的服务启动?
就我而言,我想创建两个容器:
- 一个给开发者
- 一个用于暂存(除了 env 之外几乎相同的设置)
欢迎任何帮助。
如果您将服务命名为相同的名称,则会覆盖它。所以你的文件名docker-compose.override.yml
其实很贴切
我认为这是合乎逻辑且合乎需要的。您还能如何覆盖,第二个文件中的服务名称是什么? Compose 必须以某种方式为您选择一个。毕竟,这没有意义,imo。
您可以使用 YAML anchors/overrides 来满足您的需要,但它们必须位于同一个文件中才能正常工作。
name: example
services:
web: &web
image: nginx
container_name: test-web
ports:
- 80:80
web2:
<<: *web
container_name: dupe-web
ports:
- 8080:80
我还建议删除容器名称。
name: example
services:
test-web: &web
image: nginx
ports:
- 80:80
dupe-web:
<<: *web
ports:
- 8080:80
如果你 运行 docker compose config
你可以看到标准化规格:
name: example
services:
dupe-web:
image: nginx
networks:
default: null
ports:
- mode: ingress
target: 80
published: "8080"
protocol: tcp
test-web:
image: nginx
networks:
default: null
ports:
- mode: ingress
target: 80
published: "80"
protocol: tcp
networks:
default:
name: example_default
我想创建 2 个除了环境变量外设置几乎相同的容器。
尝试了几件事都没有成功,尤其是 .override.yml(将多个 .yml 传递给 docker-compose 覆盖前一个)。
# docker-compose.yml
version: '3.7'
services:
web:
image: nginx
container_name: test-web
ports:
- 80:80
现在另一个
# docker-compose.override.yml
version: '3.7'
services:
web:
container_name: dupe-web
ports:
- 8080:80
正在做:
$ docker-compose -f docker-compose.yml -f docker-compose.override.yml up -d
Recreating test-web ... done
杀死 test-web
容器并启动新名称 dupe-web
。
有没有办法让两者都使用相同的服务启动?
就我而言,我想创建两个容器:
- 一个给开发者
- 一个用于暂存(除了 env 之外几乎相同的设置)
欢迎任何帮助。
如果您将服务命名为相同的名称,则会覆盖它。所以你的文件名docker-compose.override.yml
其实很贴切
我认为这是合乎逻辑且合乎需要的。您还能如何覆盖,第二个文件中的服务名称是什么? Compose 必须以某种方式为您选择一个。毕竟,这没有意义,imo。
您可以使用 YAML anchors/overrides 来满足您的需要,但它们必须位于同一个文件中才能正常工作。
name: example
services:
web: &web
image: nginx
container_name: test-web
ports:
- 80:80
web2:
<<: *web
container_name: dupe-web
ports:
- 8080:80
我还建议删除容器名称。
name: example
services:
test-web: &web
image: nginx
ports:
- 80:80
dupe-web:
<<: *web
ports:
- 8080:80
如果你 运行 docker compose config
你可以看到标准化规格:
name: example
services:
dupe-web:
image: nginx
networks:
default: null
ports:
- mode: ingress
target: 80
published: "8080"
protocol: tcp
test-web:
image: nginx
networks:
default: null
ports:
- mode: ingress
target: 80
published: "80"
protocol: tcp
networks:
default:
name: example_default