【问题标题】:Can I set up a docker-compose configuration with no networks?我可以设置没有网络的 docker-compose 配置吗?
【发布时间】:2021-12-22 10:22:38
【问题描述】:

我使用 Docker Compose 来配置一些 Dockerised 批处理作业。这些作业从外部数据库中提取一些数据,然后将数据保存回其他数据库。这些工作从不直接相互影响。它们不公开任何端口或运行任何服务器。

我想关闭 Docker 网络。

默认情况下,docker-compose creates a network for each configuration。有没有办法抑制这种情况,以便 compose 开始运行容器而无需创建任何网络?

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    您可以告诉 docker-compose 将主机网络用于容器。你像这样为每个容器定义它

    services:
      myapp:
        image: asdf
        network_mode: host
    

    当然,这意味着容器使用的任何端口都需要在主机上可用,因为您无法进行任何端口映射。

    通常,创建的网络是一件好事,也是您想做的事情。你可能没有意识到,但是使用docker run 运行单个容器也会创建一个网络,除非你使用主机网络模式。

    【讨论】:

    • 我个人不喜欢将容器添加到主机网络,因为存在一些缺点,例如容器与运行在主机操作系统上的服务的容器之间的潜在冲突。此外,绕过了安全机制。但这取决于用例..
    • 是的。您并没有真正解释为什么不想创建网络,所以我只是想出了一个解决方案。最好的办法几乎可以肯定是让 docker compose 创建网络并将容器附加到它。
    • 不是我的问题。我只是想启发这种方法的两面,即使它是一个有效的解决方案,但不知道问题的动机。所以没有冒犯,你的答案也是正确的,正如我所写的:取决于用例。
    • @HansKilian - 这样做的动机:没有进程公开任何端口。它们只是批次。此外,Docker-compose 中存在一个错误,如果多个进程同时启动以进行 compose 配置,有时会创建重复的网络连接。
    • @HansKilian - 你的提议和:``` 网络:{} ``` 有什么区别
    【解决方案2】:

    如果您打扰网络的唯一创建/销毁过程,您可以创建一次网络并在每次旋转撰写时使用它。

    networks:
      default:
        external: true
        name: whatevernameyougaveit
    

    此外,还有一个名为 None 的 docker 内置网络,它会完全禁用网络以供容器加入。也许你已经看到了 docker network lshost

    services:
      service:
       network_mode: none
    

    如果所有服务都使用network_mode 主机或不使用,compose 将禁止创建默认网络..

    编辑:一个人(包括我)可能有这样的想法来实现它以摆脱每个服务的network_mode 设置:

    networks:
      default:
        external: true
        name: none
    

    但是随后 compose 认为它实际上是一个网络并尝试设置网络别名,这会导致错误:network-scoped alias is supported only for containers in user defined networks。如果您尝试添加其他类似的预配置网络,同样适用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 2022-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多