【发布时间】:2019-06-07 11:52:51
【问题描述】:
我有两个 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.internal 和gateway.docker.internal,但它不起作用。
在使用docker network create my-network 创建my-network 之后,我还尝试使用--network my-network 启动这两个容器,但它不起作用。
我不知道如何解决这个问题。
【问题讨论】:
-
在 Windows 上,我认为您的 docker 容器将被分配 IP 地址(例如,192.168.99.100?),然后您将使用它从主机连接到容器,或者我猜是在容器之间。 .
-
只要您从应用容器 (
my-db:3306) 中按名称引用 db 容器,您的docker network create my-network选项就应该起作用。 -
它不工作,很可能我的应用需要一个真实地址才能工作
-
有什么理由不使用 docker-compose?特别是如果这些服务将始终一起运行。这允许一个文件运行两种服务并创建连接它们的网络。
-
@BrianWagner 没有具体原因。这是我第一次使用 docker,也许您可以推荐一个适合我需要的 docker compse 文件?
标签: docker docker-container docker-networking docker-network docker-run