背景说明

Docker Compose存在项目名的概念,其会影响网络前缀和容器名前缀

解决方案

假设存在如下docker-compose.yaml文件

  1. [root@vm1 ~]# cd work/
  2. [root@vm1 work]# ls
  3. docker-compose.yaml
  4. [root@vm1 work]# cat docker-compose.yaml
  5. version: '3'
  6. services:
  7. nginx-demo:
  8. image: nginx
  9. ports:
  10. - 8000:80
  11. expose:
  12. - 8000
  13. [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