首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Docker容器内部,我如何连接到机器的localhost?

问从Docker容器内部,我如何连接到机器的localhost?
EN

Stack Overflow用户
提问于 2014-06-20 11:54:17
回答 27查看 1.4M关注 0票数 2.3K

所以我有一个在docker容器中运行的Nginx,我有一个运行在本地主机上的mysql,我想从我的Nginx中连接到MySql。MySql在本地主机上运行,不向外界公开端口,因此它绑定在本地主机上,而不是绑定到机器的ip地址上。

有没有办法从这个docker容器中连接到这个MySql或本地主机上的任何其他程序?

这个问题不同于“如何从docker容器中获取docker主机的IP地址”,因为docker主机的IP地址可以是网络中的公共IP或私有IP,这些IP可能是也可能无法从docker容器内访问(我指的是托管在AWS或其他地方的公共IP)。即使您拥有docker主机的IP地址,也不意味着您可以在给定该IP地址的情况下从容器内连接到docker主机,因为Docker网络可能是overlay、host、bridge、macvlan等,这限制了该IP地址的可达性。

EN

回答 27

Stack Overflow用户

发布于 2017-04-21 19:33:47

对于macOS和Windows

Docker v18.03及以上(自2018年3月21日起)

使用您的内部IP地址或连接到特殊的DNS名称host.docker.internal它将解析为主机使用的内部IP地址。

Linux支持挂起https://github.com/docker/for-linux/issues/264

Docker早期版本的MacOS

Docker for Mac v17.12至v18.02

与上面相同,但使用docker.for.mac.host.internal取而代之的是。

Docker for Mac v17.06到v17.11

与上面相同,但使用docker.for.mac.localhost取而代之的是。

Docker for Mac 17.05及更低版本

要从docker容器访问主机,必须将IP别名附加到网络接口。你可以绑定任何你想要的IP,只要确保你不会把它用在其他地方就行了。

sudo ifconfig lo0 alias 123.123.123.123/24

然后确保您的服务器正在侦听上面提到的IP,或者0.0.0.0..。如果它正在监听localhost127.0.0.1它将不接受该连接。

然后只需将您的docker容器指向此IP,您就可以访问主机!

要进行测试,您可以运行以下命令curl -X GET 123.123.123.123:3000在容器里面。

别名将在每次重新启动时重置,因此如果需要,请创建启动脚本。

此处提供了解决方案和更多文档:https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds

票数 444
EN

Stack Overflow用户

发布于 2020-07-27 17:52:38

使用

代码语言:js
复制
host.docker.internal

而不是

代码语言:js
复制
localhost

作品完美无瑕对我来说。?

票数 138
EN

Stack Overflow用户

发布于 2016-08-04 05:30:40

我做了一个类似于上面的帖子的技巧,让本地IP映射到容器中的别名(DNS)。主要的问题是使用一个简单的脚本来动态获取,该脚本既可以在Linux和OSX主机IP地址..。我编写了这个脚本,它可以在这两种环境中工作(甚至在Linux发行版中也是如此"$LANG" != "en_*"已配置):

代码语言:js
复制
ifconfig | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep -v 127.0.0.1 | awk '{ print $2 }' | cut -f2 -d: | head -n1

因此,使用Docker Compose,完整的配置将是:

启动脚本(docker-run.sh)

代码语言:javascript
复制
export DOCKERHOST=$(ifconfig | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep -v 127.0.0.1 | awk '{ print $2 }' | cut -f2 -d: | head -n1)
docker-compose -f docker-compose.yml up

docker-compose.yml

代码语言:javascript
复制
myapp:
  build: .
  ports:
    - "80:80"
  extra_hosts:
    - "dockerhost:$DOCKERHOST"

然后改变http://localhost至http://dockerhost在你的代码中。

有关如何自定义DOCKERHOST脚本,看一下此post并解释了它是如何工作的。

票数 109
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24319662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档