如果我在某个主机上运行 mysql 数据库,并且该主机也在运行 docker 容器:我将如何从主机上运行的 docker 容器中访问 mysql 数据库?
例如,有没有办法将主机端口发布到容器(与 docker run -p 相反)?
原文由 Ryan Anderson 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果我在某个主机上运行 mysql 数据库,并且该主机也在运行 docker 容器:我将如何从主机上运行的 docker 容器中访问 mysql 数据库?
例如,有没有办法将主机端口发布到容器(与 docker run -p 相反)?
原文由 Ryan Anderson 发布,翻译遵循 CC BY-SA 4.0 许可协议
来自 18.03 文档:
我想从容器连接到主机上的服务
主机有一个不断变化的 IP 地址(如果您没有网络访问权限,则没有)。从 18.03 开始,我们的建议是连接到特殊的 DNS 名称
host.docker.internal
,它解析为主机使用的内部 IP 地址。网关也可以通过
gateway.docker.internal
访问。
示例:这是我用于容器内的 MySQL 连接字符串以访问主机上的 MySQL 实例的内容:
mysql://host.docker.internal:3306/my_awesome_database
原文由 Kevin Chen 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答840 阅读✓ 已解决
1 回答686 阅读✓ 已解决
1 回答630 阅读
关于如何以一致、易于理解和可移植的方式执行此操作,有几个长期的讨论。没有完整的解决方案,但我会将您链接到下面的讨论。
在任何情况下,您都想尝试使用 –add-host 选项来 docker run 将主机的 IP 地址添加到容器的 /etc/host 文件中。从那里连接到任何所需端口上的主机很简单:
文档:
https://docs.docker.com/engine/reference/commandline/run/
关于从容器访问主机的讨论:
https://github.com/docker/docker/issues/1143
https://github.com/docker/docker/issues/10023