docker-compose后网络与定义的名称不同吗?

时间:2020-02-23 03:10:51

标签: docker docker-compose docker-networking

好吧,我尝试在一个撰写文件中创建一个由多个docker组成的网络,但是即使docker-compose up运行良好,该应有的网络也不存在:

docker撰写:

networks:
  allsports.test:
    driver: bridge
services:
  allsports.test.nginx:
    build:
      context: ./allsports.test.nginx/
    container_name: allsports.test.nginx
    image: allsports.test.nginx
    networks:
    - allsports.test
    ports:
    - 380:80
    restart: on-failure
  allsports.test.redis:
    build:
      context: ./allsports.test.redis/
    container_name: allsports.test.redis
    image: allsports.test.redis
    networks:
    - allsports.test
    restart: on-failure
version: '3.7'

运行docker-compose up -d后:

Starting allsports.test.nginx ... done
Starting allsports.test.redis ... done

但是,现在我尝试检查网络:sudo docker inspect allsports.app说该网络不存在。 如果我做sudo docker network ls,也看不到网络。

如果我检查创建的码头工人之一:

sudo docker inspect allsports.test.nginx -f "{{.NetworkSettings.Networks}}"

> map[allsportstest_allsports.test:0xc000604000]

是什么原因导致重命名?我如何(逻辑上)找到通过检查撰写文件创建的实际网络?

1 个答案:

答案 0 :(得分:0)

docker创建的默认docker-compose名称使用组合项目名称作为前缀,以避免命名冲突。

默认情况下,项目名称是包含您的docker-compose.yml的文件夹的名称。您可以通过COMPOSE_PROJECT_NAME environment variable(在您的Shell或.env文件中)或使用-p command line option

对其进行自定义

默认docker名称的计算方式取决于对象的类型。例如,默认容器名称是根据模式<projectName>_<serviceIdentifier>_<containerIncrement>创建的。但是您通常可以在需要时使用自己的自定义名称(就像在上面的compose文件中通过命名唯一的服务容器一样)。

对于网络,默认名称为<projectName>_<networkIdentifier>,由您问题中的上一个检查命令报告。因此,您绝对可以从文件中的撰写项目名称和网络标识符推断出该名称。

同时,与容器一样,您可以使用network name option来配置自己的自定义名称,该名称将照原样使用。在这种情况下,您必须自己处理潜在的命名冲突。

networks:
  allsports.test:
    driver: bridge
    name: allports.test