macOS 和 Windows 上的 --network host 的 Docker 替代方案

Fra*_*rzi 7 docker docker-container docker-network docker-run

我有两个 Docker 容器:

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

我像这样运行我的数据库容器:

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:

主机网络驱动程序仅适用于 Linux 主机,Docker for Mac、Docker for Windows 或 Docker EE for Windows Server 不支持。

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

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

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

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

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

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

Bri*_*ner 4

对于多个服务,创建一个 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:
Run Code Online (Sandbox Code Playgroud)

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

在这种情况下,Docker 的魔力提供了一个主机名为“mynetwork”的网络。它应该向该网络上的其他服务公开默认端口。如果要重新映射端口,模式为目标:源。

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

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