Docker 替代 macOS 和 Windows 上的 --network 主机

标签 docker docker-container docker-networking docker-network docker-run

我有两个码头容器:

  • 数据库
  • 使用数据库的应用

  • 我像这样运行我的数据库容器:
    docker run --name my-db -p 127.0.0.1:3306:3306 my-db-image
    我的应用程序容器是这样的:
    docker run --name my-app --network host -it my-app-image
    这在 Linux 上运行良好。我可以从主机系统和应用程序容器访问数据库。完美的。

    然而--network host不适用于 Mac 和 Windows:

    The host networking driver only works on Linux hosts, and is not supported on Docker for Mac, Docker for Windows, or Docker EE for Windows Server.



    (来源:https://docs.docker.com/network/host/)

    我仍然可以通过 127.0.0.1:3306 访问数据库从主主机,但我无法从应用程序容器访问它。

    我该如何解决这个问题?如何让应用程序容器连接到数据库(并使用 127.0.0.1:3306 继续从主主机访问数据库)?

    我试过使用 host.docker.internalgateway.docker.internal但它不起作用。

    我还尝试使用 --network my-network 启动两个容器创建后 my-networkdocker network create my-network但它不起作用。

    我不知道如何解决这个问题。

    最佳答案

    对于多个服务,创建一个 docker-compose.yml 文件通常会更容易,该文件将启动所有服务和连接它们所需的任何网络。

    version: '3'
    services:
      my-db:
        image: my-db-image
        ports:
          - "3306:3306"
        networks:
          - mynetwork
    
      my-app:
        image: my-app-image
        ports:
          - "8000:80"
        networks:
          - mynetwork
    
    networks:
      mynetwork:
    

    从项目文件夹中,您运行 docker-compose updocker-compose up -d使服务在后台运行。

    在这种情况下,Docker 的神奇之处在于提供了一个主机名为“mynetwork”的网络。它应该向该网络上的其他服务公开默认端口。如果要重新映射端口,则模式为 target:source。

    我不知道您是否需要此处的“端口”配置。但我正在尝试将您的配置映射到撰写文件。此外,我假设您需要在某个端口上公开该应用程序;使用 8000,因为这是很常见的设置。

    这里的参数是什么? Docker-compose reference

    关于Docker 替代 macOS 和 Windows 上的 --network 主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54165483/

    相关文章:

    docker - Docker每个网络端口映射

    linux - docker-compose 找不到合适的配置文件

    go - Docker 发布对于 golang 应用程序无法正常工作

    docker - Docker端口映射不起作用

    python - Docker容器运行后存在且日志中没有错误

    docker - 如何为 docker 容器分配更多内存

    docker - 使用 docker 时如何执行 ../COPY

    docker : Why the Commands from Dockerfile were not being executed?

    macos - 为 docker for mac 指定 ip 地址

    Docker 容器可以访问互联网但不能访问本地网络