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


我尝试在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

我需要它在不同的项目上自动连接两个容器。


2410
2018-03-12 16:41


起源



答案:


如果你有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 并根据您的喜好制作不同的东西,然后您可以预测从中创建的网络名称。

9
2018-03-12 17:25



感谢您的回答,但我想从代码(来自docker-compose.vs.yml文件)自动创建网络,如果网络不存在而不使用cmd。外部选项只能使用完整的网络名称:dockercompose1163770330_myNetwork,我不能因为标识符而将此名称相同 - Mark Sabakov
@MarkSabakov它应该根据它所在的目录创建它。我猜这个标识符来自另一个工具(例如你标记的VS2017或其他东西)。 docker-compose本身从存储它的目录名称中获取该名称。 - Dan Lowe
@MarkSabakov Docker Compose无法创建网络 为你。 - Matt
为什么它必须是外部网络? - Phil
这里只是一个快速提示 networks: 是顶级标签,因此必须与顶级标签处于同一顶级标签 services: 标签,意思是 没有缩进! = :)否则您将收到语法错误。仅供参考:如何检查语法: docker-compose -f ./dc.yaml config。 - prismalytics.io


答案:


如果你有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 并根据您的喜好制作不同的东西,然后您可以预测从中创建的网络名称。

9
2018-03-12 17:25



感谢您的回答,但我想从代码(来自docker-compose.vs.yml文件)自动创建网络,如果网络不存在而不使用cmd。外部选项只能使用完整的网络名称:dockercompose1163770330_myNetwork,我不能因为标识符而将此名称相同 - Mark Sabakov
@MarkSabakov它应该根据它所在的目录创建它。我猜这个标识符来自另一个工具(例如你标记的VS2017或其他东西)。 docker-compose本身从存储它的目录名称中获取该名称。 - Dan Lowe
@MarkSabakov Docker Compose无法创建网络 为你。 - Matt
为什么它必须是外部网络? - Phil
这里只是一个快速提示 networks: 是顶级标签,因此必须与顶级标签处于同一顶级标签 services: 标签,意思是 没有缩进! = :)否则您将收到语法错误。仅供参考:如何检查语法: docker-compose -f ./dc.yaml config。 - prismalytics.io


我假设你使用VS2017 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添加到应该共享网络的所有项目中。


2
2017-10-31 07:27