当前位置: 首页 > 知识库问答 >
问题:

如何从正在运行的Docker容器访问主机MySQL数据库?

李昊苍
2023-03-14

如果我有一个mysql数据库在某台主机上运行,并且该主机也在运行docker容器:我将如何从主机上运行的docker容器中访问mysql数据库?。

有没有一种方法可以将主机端口发布到容器(与docker run-p的功能相反)?

共有3个答案

斜淳
2023-03-14

从Docker 17.06开始,docker容器中提供了一个特殊的仅限Mac的DNS名称,该名称解析为主机的IP地址。它是:

docker。对于雨衣。本地服务器

文件如下:https://docs.docker.com/docker-for-mac/networking/#httphttps-代理支持

张翰音
2023-03-14

关于如何以一致、易于理解和可移植的方式做到这一点,有几个长期的讨论。没有完整的解决方案,但我会把你链接到下面的讨论。

无论如何,您都想尝试使用docker run的--add-host选项将主机的IP地址添加到容器的 /etc/host文件中。从那里开始,在任何需要的端口上连接到主机都很简单:

将条目添加到容器主机文件

您可以使用一个或多个--add-host标志将其他主机添加到容器的 /etc/hosts文件中。此示例为名为docker的主机添加静态地址:

 $ docker run --add-host=docker:10.180.0.1 --rm -it debian
    $$ ping docker
    PING docker (10.180.0.1): 48 data bytes
    56 bytes from 10.180.0.1: icmp_seq=0 ttl=254 time=7.600 ms
    56 bytes from 10.180.0.1: icmp_seq=1 ttl=254 time=30.705 ms
    ^C--- docker ping statistics ---
    2 packets transmitted, 2 packets received, 0% packet loss
    round-trip min/avg/max/stddev = 7.600/19.152/30.705/11.553 ms

注意:有时需要连接到Docker主机,这意味着需要获取主机的IP地址。可以使用以下shell命令简化此过程:

 $ alias hostip="ip route show 0.0.0.0/0 | grep -Eo 'via \S+' | awk '{ print $2 }'"
 $ docker run  --add-host=docker:$(hostip) --rm -it debian

文档:

https://docs.docker.com/engine/reference/commandline/run/

关于从容器访问主机的讨论:

https://github.com/docker/docker/issues/1143

https://github.com/docker/docker/issues/10023

葛越
2023-03-14

来自18.03文档:

我想从容器连接到主机上的服务

主机的IP地址正在更改(如果您没有网络访问权限,则没有IP地址)。从18.03开始,我们建议连接到特殊的DNS名称主机。docker。内部,解析为主机使用的内部IP地址。

网关也可以作为网关访问。docker。内部。

示例:我在容器中使用MySQL连接字符串访问主机上的MySQL实例:

mysql://host.docker.internal:3306/my_awesome_database
 类似资料:
  • 问题内容: 如果我在某个主机上运行mysql数据库,并且该主机也正在运行docker容器:我如何从主机上运行的docker容器中访问mysql数据库? 例如,是否有一种方法可以将主机端口发布到容器(与docker run -p的作用相反)? 问题答案: 关于如何以一致的,易于理解的和可移植的方式执行此操作的问题已有很长时间的讨论。尚无完整的解决方案,但我会将您链接到下面的讨论。 无论如何,您都想尝

  • 问题内容: 我有一个运行詹金斯的码头集装箱。作为构建过程的一部分,我需要访问在主机上本地运行的Web服务器。是否可以将主机Web服务器(可以配置为在端口上运行)暴露给jenkins容器? 编辑:我正在Linux机器上本地运行docker。 更新: 除了下面的@larsks答案之外,要从主机获取主机IP的IP地址,我还要执行以下操作: 问题答案: 在Linux上本地运行Docker时,您可以使用接口

  • 我有一个docker容器在运行Jenkins。作为构建过程的一部分,我需要访问在主机上本地运行的web服务器。有没有一种方法可以将主机web服务器(可以配置为在端口上运行)公开给jenkins容器? 编辑:我正在Linux机器上原生运行docker。 更新: 除了@larsks下面的答案之外,要从主机获取主机IP的IP地址,我还做了以下操作:

  • 我有一个docker应用程序,我使用以下docker compose。yml运行它: 我有一个没有docker化的服务器在我的机器上运行,我可以通过访问它。我希望我的服务能够访问它。 我发现有人建议在我的服务配置中添加以下内容: 但是当我添加这个时,并尝试,我得到。当我尝试<code>curl时,也会出现同样的错误http://host.docker.internal:3000。 我拼命地尝试将端

  • 我有一个docker compose文件,看起来像: 运行之后,我看到所有的服务都启动了,并且看起来工作良好。我的服务使用以下sqlalchemy连接字符串连接到postgres: 编辑:这是在接受的解决方案中的一个评论中回答的,但我认为值得在这里指出:我已经在本地运行postgres,这引起了各种混乱。 删除我的本地postgres实例并更新我的hosts文件,就像接受的答案中提到的那样,一切都