如果我检查官方的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"]
答案 0 :(得分:2)
Docker创建一个网络命名空间,因此在您的容器中,您将看不到主机的公开端口。
在您的用例中,如果您只需要从其他容器访问mongo,则不需要使用-p
运行mongo。 --link
只会"注入"链接的容器信息作为环境变量。
在新容器中,您可以env
查看列表,并且您将拥有类似DB_1_PORT_27027_TCP_ADDR
的内容,其中包含您可以连接的mongo容器的私有IP。