【问题标题】:Docker Compose - adding identifier to network nameDocker Compose - 将标识符添加到网络名称
【发布时间】:2017-08-02 16:04:06
【问题描述】:

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

networks:
  myNetwork:
    driver: bridge

但是 docker 添加了一些标识符:

docker 网络 ls ->

NETWORK ID          NAME                                         DRIVER              SCOPE 
0e1fec1a9a30        dockercompose1163770330_myNetwork            bridge              local

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

NETWORK ID          NAME                                         DRIVER              SCOPE
0e1fec1a9a30        myNetwork                                    bridge              local

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

【问题讨论】:

    标签: docker docker-compose .net-core visual-studio-2017


    【解决方案1】:

    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
    

    【讨论】:

    • 我遇到了同样的问题,你的评论@Frans 帮了大忙。
    【解决方案2】:

    如果您让 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 并使其成为您喜欢的不同的东西,那么您可以预测从中创建的网络名称。

    【讨论】:

    • 感谢您的回答,但如果不使用 cmd 网络不存在,我想从代码(来自 docker-compose.vs.yml 文件)自动创建网络。外部选项仅适用于完整的网络名称:dockercompose1163770330_myNetwork,我不能相信这个名称会因为标识符而相同
    • @MarkSabakov 它应该根据它所在的目录创建它。我猜这个标识符来自另一个工具(例如你标记的 VS2017 或其他东西)。 docker-compose 本身从存储它的目录的名称中获取该名称。
    • @Phil_1984_2 它不一定是外部网络,但 OP 已尝试在 compose/visual-studio 中执行此操作,并且它没有使用他们想要的名称创建网络。使用这样的外部网络可以控制网络的确切名称,因为它是手动创建的。
    • 这里只是一个快速提示,networks: 是顶级标签,因此必须与 services: 处于同一顶级标签,这意味着 没有缩进! =:) 否则你会得到一个语法错误。仅供参考:如何检查语法:docker-compose -f ./dc.yaml config.
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2022-06-15
      • 2019-04-26
      • 1970-01-01
      相关资源
      最近更新 更多