docker compose如何使用同一图像创建多个容器
出于某种原因,我需要创建具有相同图像的容器,但当我启动第二个容器时,它只是重新启动了第一个容器 第一个yml文件:docker compose如何使用同一图像创建多个容器,docker,Docker,出于某种原因,我需要创建具有相同图像的容器,但当我启动第二个容器时,它只是重新启动了第一个容器 第一个yml文件: version: "3.1" services: php: image:php:php73-fpm restart: always ports: - "9000:9000" - "9501:9501" volumes: - $PWD/../:/var/www/html/ networks:
version: "3.1"
services:
php:
image:php:php73-fpm
restart: always
ports:
- "9000:9000"
- "9501:9501"
volumes:
- $PWD/../:/var/www/html/
networks:
- app_net
container_name: php
networks:
app_net:
driver: bridge
version: "3.1"
services:
php:
image:php:php73-fpm
restart: always
ports:
- "19000:19000"
- "19501:19501"
volumes:
- $PWD/../:/var/www/html/
networks:
- app_net2
container_name: php73
networks:
app_net2:
driver: bridge
第二个yml文件:
version: "3.1"
services:
php:
image:php:php73-fpm
restart: always
ports:
- "9000:9000"
- "9501:9501"
volumes:
- $PWD/../:/var/www/html/
networks:
- app_net
container_name: php
networks:
app_net:
driver: bridge
version: "3.1"
services:
php:
image:php:php73-fpm
restart: always
ports:
- "19000:19000"
- "19501:19501"
volumes:
- $PWD/../:/var/www/html/
networks:
- app_net2
container_name: php73
networks:
app_net2:
driver: bridge
当我运行docker compose up-d
启动第一个时:
$ cd ~/Document/php/work/docker/
$ docker-compose up -d
Creating network "docker_app_net" with driver "bridge"
Creating php ... done
然后我将目录切换到第二个yml文件
$ cd ../../private/docker/
$ docker-compose up -d
Recreating php ... done
不能有两个同名的容器。由于这两个名称都是php,Docker认为它们是应该为同一个容器合并的设置。重命名其中一个。Compose有一个。默认情况下,项目名称是包含
docker compose.yml
文件的目录的基本名称。在您的示例中,两个目录都名为docker
(即使它们位于不同的父目录中),因此Compose会查找名为docker
的项目和名为php
的容器,并找到匹配项
有四种方法可以覆盖此选项:
COMPOSE\u PROJECT\u NAME
docker compose
命令上)docker compose.yml
文件中,端口的第二部分:
需要匹配容器正在侦听的内容;这允许与第一部分不同。因此,在两个文件中使用相同的9500/9501
Compose项目命名的另一个结果是,Compose创建的容器、卷和网络的标准名称将以项目名称作为前缀。如果项目名称(当前目录名称)为docker2
,并且您将撰写文件缩减为
版本:“3.1”
服务:
php:
生成:。
重新启动:始终
端口:
- "19000:9000"
- "19501:9501"
#无手动容器名称:或网络:
该容器将命名为
docker2_php_1
,并将连接到名为docker2_default
的网络;这些将不同于在docker1
项目/目录中创建的容器/网络。很好,它可以工作,但我仍然有一个问题,实际上,我还有其他docker-compose.yml,简单地说,我将它们命名为a.yml和B.yml。他们都启动了三个容器,其中一个是相同的图像:redis:5.0.5
,服务名称相同:redis
。但当我开始B.yml时,它并没有像:创建xxx done。。。正在创建xxx已完成。。。重新启动redis-A已完成…
(redis-A是A.yml中的容器名称,B.yml的容器名称是redis-B)@fear.jpg拥有两个同名服务也会有糟糕的结局。也不要那样做,太好了!,你的回答很好地告诉了我为什么以及如何去做,我尝试了你的建议,而且效果很好。