背景说明
Docker Compose存在项目名的概念,其会影响网络前缀和容器名前缀
解决方案
假设存在如下docker-compose.yaml文件
[root@vm1 ~]# cd work/
[root@vm1 work]# ls
docker-compose.yaml
[root@vm1 work]# cat docker-compose.yaml
version: '3'
services:
nginx-demo:
image: nginx
ports:
- 8000:80
expose:
- 8000
[root@vm1 work]#
默认名称
一个compose对应的一组服务有一个公用的项目名(project name),默认的项目名称为compose 文件所在文件夹的名字。
[root@vm1 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
6c0b566e6544 work_default bridge local
[root@vm1 ~]#
CONTAINER ID IMAGE CREATED STATUS PORTS NAMES NAMES
d2898da21dd8 nginx 2 hours ago Up 2 hours 8000/tcp work_nginx-demo_1
变量文件
官方文档: https://docs.docker.com/compose/environment-variables/
项目名称可以通过创建文件.env写入环境变量COMPOSE_PROJECT_NAME来指定
[root@vm1 work]# touch .env
[root@vm1 work]# cat .env
COMPOSE_PROJECT_NAME=xxx
[root@vm1 work]# docker-compose up -d
Creating network "xxx_default" with the default driver
Creating xxx_nginx-demo_1 ... done
[root@vm1 work]# docker network ls
NETWORK ID NAME DRIVER SCOPE
6c0b566e6544 work_default bridge local
226df17bf3f5 xxx_default bridge local
[root@vm1 work]#
[root@vm1 work]# docker ps
CONTAINER ID IMAGE CREATED STATUS NAMES
4ff89c76e915 nginx 2 minutes ago Up 2 minutes xxx_nginx-demo_1
启动命令
[root@vm1 work]# docker-compose
Define and run multi-container applications with Docker.
Usage:
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
docker-compose -h|--help
Options:
-f, --file FILE Specify an alternate compose file (default: docker-compose.yml)
-p, --project-name NAME Specify an alternate project name (default: directory name)
--verbose Show more output
--no-ansi Do not print ANSI control characters
-v, --version Print version and exit
-H, --host HOST Daemon socket to connect to
[root@vm1 work]# docker-compose up -p yyy -d
[root@vm1 work]# docker network ls
NETWORK ID NAME DRIVER SCOPE
6c0b566e6544 work_default bridge local
226df17bf3f5 yyy_default bridge local
[root@vm1 work]#
[root@vm1 work]# docker ps
CONTAINER ID IMAGE CREATED STATUS NAMES
4ff89c76e915 nginx 2 minutes ago Up 2 minutes yy_nginx-demo