docker-compose v3 将文件夹名称添加到网络名称之前

Ras*_*lam 4 docker docker-compose docker-networking

当我运行时docker-compose up -d,docker 总是创建容器名称和网络名称,并以包含docker-compose.yml文件的文件夹名称为前缀。

我可以指定容器名称如下:

nginx:
    container_name: nginx
    build:
        context: .
        dockerfile: .docker/docker-nginx.dockerfile
Run Code Online (Sandbox Code Playgroud)

但是如何指定网络名称,以便它不会在其前面添加文件夹名称?

谢谢。

Shu*_*ogi 7

Docker 在当前文件夹名称前面加上使用 docker compose 文件创建的所有组件名称。

例如:如果包含 docker-compose.yml 文件的当前文件夹名称是 test,则所有卷、网络和容器名称都将附加到它上面。为了解决这个问题,人们早先提出了在 docker-compose 命令中使用-p标志的想法,但该解决方案并不是最可行的解决方案,因为在 -p 属性之后需要一个项目名称。然后将项目名称附加到使用 docker compose 文件创建的所有组件。

上述问题的解决方案是使用如下所示的name属性。

volumes: 
  data:
    driver: local
    name: mongodata

networks: 
  internal-network:
    driver: bridge
    name: frontend-network
Run Code Online (Sandbox Code Playgroud)

该卷可以在服务部分称为

services:
  mongo-database:
      volumes: 
        - data:/data/db
      networks: 
        - internal-network
Run Code Online (Sandbox Code Playgroud)

上面的name属性将阻止 docker-compose 预先添加文件夹名称。

注意:对于容器名称,可以使用属性container_name

services:
  mongo-database:
    container_name: mongo
Run Code Online (Sandbox Code Playgroud)


opH*_*AME 5

您必须在 docker-compose 项目目录的根目录中放置一个“.env”文件。

COMPOSE_PROJECT_NAME=MyFancyProject
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅 Docker 文档:https : //docs.docker.com/compose/reference/envvars/

如果您不使用 docker-compose,则可以使用“ -p”参数将其设置为docker run.

  • 为什么我不能只在撰写文件中指定名称?这毫无意义。撰写文件的目的是描述项目,对吧?项目的名称不是变量,其他事物可能依赖于它是静态值,以便可以引用它。 (3认同)