【问题标题】:How to use host network while linking to a container?链接到容器时如何使用主机网络?
【发布时间】:2016-02-26 11:21:57
【问题描述】:

在我的 docker-compose 中:

laravel:
    image: trackware
    links:
        - postgis:postgis
    ports:
        - "80:80"
        - "3306:3306"
        - "443:443"
        - "220:22"
        - "8000:8000"
    net: "host"
    restart:  always
    volumes:
        - C:/H/repositories/pubnub:/share
    container_name: laravel

postgis:
    image: mdillon/postgis
    env_file: .postgis_env
    ports:
        - "9090:9000"
        - "54320:5432"
    container_name: postgis

如果我运行 docker-compose up -d 我会收到此错误:

Conflicting options: host type networking can't be used with links. This would result in undefined behavior

那么,我将如何在链接到 postgis 容器时使用net: "host"? laravel 容器需要运行 pubnub 客户端,需要高性能网络进行实时消息处理,并且需要链接到postgis 容器才能访问数据库。

那么,有什么建议吗?我正在使用 docker 1.10.2

【问题讨论】:

  • PubNub 有什么需要考虑的吗?看起来没有,但我想我会问的。
  • 不,这里没有与 PubNub 相关的内容
  • 你可能想从这个问题中删除 laravel 标签,因为它似乎是一个一般的 docker-compose 问题

标签: laravel docker docker-compose


【解决方案1】:

由于您将 postgis 端口暴露给主机,您可以跳过链接并通过localhost:9000 连接到它。我相信这会起作用,因为 Laravel 应用程序驻留在主机网络上,并且它们将共享这些端口。

【讨论】:

  • 我试图将 django 容器连接到 127.0.0.1 上的 postgis 容器,但它仅适用于 localhost。
【解决方案2】:

我们使用 links 关键字的原因是为了让 docker 可以在内部进行主机名解析,以便两个不同的容器可以相互通信。 在您的情况下,如果您不使用主机网络并使用链接关键字,那么 docker 将在内部创建一个包含每个容器名称的主机名,以便两个容器可以相互通信。 当您使用“主机”模式网络时,意味着您告诉 docker 我将使用“主机”底层网络,因此只需在本地主机上公开端口,我的容器就可以相互通信。

【讨论】:

    【解决方案3】:

    我不知道为什么,但是...您不应该使用“主机”驱动程序和端口映射,至少您不会得到预期的结果。如果像这样“220:22”,您将获得 22 端口映射到主机。

    据我所知,“Net”已过时,请改用“network_mode”。 另外我建议您将 docker-compose 更新到最新版本,现在是 1.6.2。以前的版本存在一些网络问题。

    您可以使用“bridge”驱动程序吗?在你的情况下,我看不到它无法解决的问题。

    【讨论】:

    • 如何在 windows 上更新 docker-compose?如何将 docker-compose 文件转换为版本 2?
    • 抱歉,不确定 Windows。尝试运行toolbox 并选中“docker-compose”框。关于转换撰写文件,在您的情况下,只需添加版本和服务部分。这里有更多关于它link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2021-01-12
    • 2021-11-04
    相关资源
    最近更新 更多