docker:显示来自链接容器的开放端口

时间:2014-11-26 10:16:53

标签: mongodb docker

如果我检查官方的mongo docker图像,我可以看到它暴露了端口27017

$ docker inspect mongo
...
"ExposedPorts": {
    "27017/tcp": {}
},
...

我已经运行了图像,将内部端口绑定到我的主机上的相同内容:

$ docker run -p 27017:27017 -d --name db mongo

我现在以交互模式运行我自己的图像,启动bash

$ docker run -i -t --link db:db_1 cd9b5953b633 /bin/bash

在我的dockerized容器中,如果我尝试显示打开的端口,则没有任何内容正在侦听。

$ netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path

我在这里做错了什么?如何从我的dockerized容器连接到mongo容器?

如果它有用,这是我的Dockerfile:

# https://registry.hub.docker.com/u/dockerfile/nodejs/ (builds on ubuntu:14.04)
FROM dockerfile/nodejs

MAINTAINER My Name, me@email.com

ENV HOME /home/web
WORKDIR /home/web/site

RUN useradd web -d /home/web -s /bin/bash -m

RUN npm install -g grunt-cli
RUN npm install -g bower

RUN chown -R web:web /home/web
USER web

RUN git clone https://github.com/repo/site /home/web/site

RUN npm install
RUN bower install --config.interactive=false --allow-root

ENV NODE_ENV development

# Port 9000 for server
# Port 35729 for livereload
EXPOSE 9000 35729
CMD ["grunt"]

1 个答案:

答案 0 :(得分:2)

Docker创建一个网络命名空间,因此在您的容器中,您将看不到主机的公开端口。

在您的用例中,如果您只需要从其他容器访问mongo,则不需要使用-p运行mongo。 --link只会"注入"链接的容器信息作为环境变量。

在新容器中,您可以env查看列表,并且您将拥有类似DB_1_PORT_27027_TCP_ADDR的内容,其中包含您可以连接的mongo容器的私有IP。