Docker Compose -将标识符添加到网络名称

33qvvth1  于 2023-06-21  发布在  Docker
关注(0)|答案(4)|浏览(148)

我尝试在docker-compose.vs.debug.yml文件中创建网络:

networks:
  myNetwork:
    driver: bridge

但是docker添加了一些标识符:
docker network ls ->

NETWORK ID          NAME                                         DRIVER              SCOPE 
0e1fec1a9a30        dockercompose1163770330_myNetwork            bridge              local

如果有任何选项可以这样命名它:

NETWORK ID          NAME                                         DRIVER              SCOPE
0e1fec1a9a30        myNetwork                                    bridge              local

我需要它自动连接两个独立的项目容器。

ezykj2lf

ezykj2lf1#

根据https://docs.docker.com/compose/networking/
网络也可以自定义名称(自3.5版起):

version: "3.5"
networks:
  frontend:
    name: custom_frontend
    driver: custom-driver-1

因此,您可以选择简单地将网络命名为myNetwork,如下所示:

networks:
  myNetwork:
    name: myNetwork
    driver: bridge

或者,如果你想让你的容器加入一个现有的网络(我知道你说你想让docker-compose为你创建网络,但对于阅读这个问题的人来说,这可能会有帮助),https://docs.docker.com/compose/networking/声明:
如果您希望容器加入一个预先存在的网络,请使用external选项:

networks:
  default:
    external:
      name: my-pre-existing-network
km0tfn4u

km0tfn4u2#

如果你让docker-compose创建网络,它将自己决定名称。通常,它会查看docker-compose.yml所在目录的名称,并将其用作前缀。根据您显示的名称,这个docker-compose.yml文件似乎位于名为dockercompose1163770330的目录中。它将此名称与您指定的myNetwork名称组合,并创建一个名为dockercompose1163770330_myNetwork的网络。
如果要控制网络的确切名称,有两种选择。
1.使用在docker-compose外部创建的网络(“外部”网络)。

networks:
  default:
    external:
      name: myNetwork

这意味着其他东西已经创建了网络。如果您还没有这样的网络,创建它很容易。

docker network create myNetwork

1.(如果可能)确定visual-studio如何命名路径,并将该路径更改为静态路径。这是否可能,或者如何,我不知道。但是如果您可以控制dockercompose1163770330并使其与您喜欢的不同,那么您可以预测从它创建的网络名称。

g0czyy6m

g0czyy6m3#

我假设你使用VS 2017 dcproj。我通过在dcproj项目中手动创建网络作为PreBuildEvent来解决这个问题。将预构建目标添加到.dcproj文件:

<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
    <Exec Command="echo Creating external docker network" />
    <Exec Command="docker network create customnetwork"  IgnoreExitCode="true" />
</Target>

然后在你的docker-compose文件中,你可以指定一个外部网络:

networks:
  default:
    external:
      name: customnetwork

要求您在其他项目之前启动dcproj,或者将相同的prebuild exec添加到应共享网络的所有项目。

pxyaymoc

pxyaymoc4#

关于Docker Docs-
您的应用程序的网络将根据“项目名称”命名,该名称基于其所在目录的名称。您可以使用--project-name标志或COMPOSE_PROJECT_NAME环境变量覆盖项目名称。”
网络名称问题的一个更简单的解决方案是创建一个.env文件,其中包含以下条目

COMPOSE_PROJECT_NAME="myDeployment"

这将以相同的名称命名默认网络。

相关问题