Docker 在 macOS 和 Windows 上替代 --network host
Docker alternative to --network host on macOS and Windows
我有两个 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:
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.internal
和 gateway.docker.internal
但它不起作用。
我还尝试在使用 docker network create my-network
创建 my-network
之后使用 --network 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 up
或docker-compose up -d
在后台创建服务运行。
在这种情况下,Docker 的魔法提供了一个主机名为 "mynetwork" 的网络。它应该向该网络上的其他服务公开默认端口。如果要重新映射端口,则模式为 target:source。
我不知道你需要这里的 'ports' 配置。但我正在尝试将您的配置映射到撰写文件。另外我假设您需要在某个端口上公开该应用程序;使用 8000,因为这是很常见的设置。
这里的参数是什么? Docker-compose reference
我有两个 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:
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.internal
和 gateway.docker.internal
但它不起作用。
我还尝试在使用 docker network create my-network
创建 my-network
之后使用 --network 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 up
或docker-compose up -d
在后台创建服务运行。
在这种情况下,Docker 的魔法提供了一个主机名为 "mynetwork" 的网络。它应该向该网络上的其他服务公开默认端口。如果要重新映射端口,则模式为 target:source。
我不知道你需要这里的 'ports' 配置。但我正在尝试将您的配置映射到撰写文件。另外我假设您需要在某个端口上公开该应用程序;使用 8000,因为这是很常见的设置。
这里的参数是什么? Docker-compose reference