我有两个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主机,而Mac的Docker,Windows的Docker或Windows Server的Docker EE不支持该主机网络驱动程序。
(来源:https://docs.docker.com/network/host/)
我仍然可以从主主机通过127.0.0.1:3306
访问数据库,但是不能从应用程序容器访问数据库。
如何解决此问题?如何让应用容器连接到数据库(并继续使用127.0.0.1:3306
从主主机访问数据库)?
我尝试使用host.docker.internal
和gateway.docker.internal
,但是它不起作用。
在使用--network my-network
创建my-network
之后,我还尝试过使用docker network create my-network
启动两个容器,但这是行不通的。
我不知道如何解决这个问题。
答案 0 :(得分:2)
对于多种服务,创建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。
我不知道您是否需要此处的“端口”配置。但是我正在尝试将您的配置映射到撰写文件。另外,我假设您需要在某个端口上公开该应用程序;使用8000,因为这是很常见的设置。
这里的参数是什么? Docker-compose reference