Docker:连接到容器(不暴露端口)

时间:2016-09-24 08:49:51

标签: mongodb docker

首先要做的事情是:我确实使用了Google和SO的搜索。

任务

尝试将MongoGUIClient从我的主机(OSX)连接到容器内的MongoDB。

我做了什么?

  1. 版本:docker run --name some-mongo -d mongo
  2. 版本:docker run --name some-mongo -d -p 127.0.0.1:27017:27017 mongo
  3. 有什么问题?

    使用2.版本我可以从主机连接而不会出现任何进一步的问题。但这意味着我需要在我的系统上公开那个我不想做的端口。

    我想要实现的目标

    我想使用上面给出的1.版本,不暴露端口然后执行docker inspect来获取容器ip(在我的情况下是172.17.0.2)然后我想连接到{ {1}}但不起作用,这就是问题

    我在这里做错了什么?我的概念性错误是什么?我只想连接到该容器子网络而不暴露端口。这不可能吗?

2 个答案:

答案 0 :(得分:2)

使用defreitas/dns-proxy-server。然后您可以使用其主机名访问容器。

示例:

# First run DPS
$ docker run --rm --hostname dns.mageddo \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /etc/resolv.conf:/etc/resolv.conf \
defreitas/dns-proxy-server

# Then run the container
$ docker run --hostname some-mongo --name some-mongo -d mongo

您可以使用 netcat 检查它是否有效:

$ nc -z some-mongo 27017
$ echo $?
0

答案 1 :(得分:1)

即使您可以直接联系您的容器,它的暴露端口也只能被其他容器看到,而不是您的docker主机(xhyve VM)或您的实际主机(Mac)。

因此仍然需要制图 然后,您可以尝试使用XHyve Alpine VM IP,但...... this thread提到了一些当前(2016年第4季度)限制,无法做到这一点。

这就是当前application example仅显示通过localhost访问的原因。

https://docs.docker.com/docker-for-mac/images/hello-world-nginx.png

来自this thread

  

目前访问容器的唯一方法是公开端口   Mac上没有docker0