【问题标题】:Is it possible to replicate Kubernetes container network environment with docker compose?是否可以使用 docker compose 复制 Kubernetes 容器网络环境?
【发布时间】:2018-02-05 13:21:56
【问题描述】:

Kubernetes 有一个 Pod 的概念,容器可以在 Pod 之间共享端口。例如在同一个 pod 中,一个容器可以通过 localhost:80 访问另一个容器(监听 80 端口)。

但是在 docker-compose 上,localhost 指的是容器本身。

有没有办法在 docker 上实现 kubernetes 网络配置?

基本上我有一个 kubernetes 配置,我想在 docker-compose 配置中重用它,而无需修改图像。

【问题讨论】:

    标签: docker kubernetes containers docker-compose


    【解决方案1】:

    我似乎已经通过将network_mode: host 添加到我的 docker-compose 配置中的每个容器配置来使其工作。

    【讨论】:

      【解决方案2】:

      是的,你可以。你运行一个服务,然后你就可以使用network_mode: service:<nameofservice>

      version: '3'
      
      services:
        mainnetwork:
          image: alpine
          command: tail -f /dev/null
        mysql:
          image: mysql
          network_mode: service:mainnetwork
          environment:
            - "MYSQL_ROOT_PASSWORD=root"
        mysqltest:
          image: mysql
          command: bash -c "sleep 10 && mysql -uroot -proot -h 127.0.0.1 -e 'CREATE DATABASE tarun;'"
          network_mode: service:mainnetwork
      

      Edit-1

      所以network_mode 可以有以下可能的值

      • 主持人
      • 服务:(同一撰写文件中的服务名称)
      • 容器:(已运行的外部容器的名称或 ID)

      在这种情况下,我使用了service:mainnetwork,所以主网需要启动。

      这也已经在Docker 17.06 ce 上进行了测试。所以我假设你使用的是更新版本

      【讨论】:

      • 欣赏答案。您能否添加有关此功能称为什么的其他信息?或者任何相关的文档链接也很有用。
      • 这行得通吗?如果我在配置中使用相关的network_mode 值,我会得到ERROR: for nginx Cannot start service nginx: cannot join network of a non running container:
      【解决方案3】:

      使用Docker Links 机制,您可以将容器连接在一起,然后声明的端口将通过 localhost 可用。

      【讨论】:

      • 我认为这已被弃用。
      • 对,但是在链接之后有一个示例如何通过提及链接来做到这一点。
      猜你喜欢
      • 1970-01-01
      • 2020-12-17
      • 2021-01-01
      • 2021-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多