如果我检查官方的 mongo docker 镜像,我可以看到它暴露了 27017 端口
$ docker inspect mongo
...
"ExposedPorts": {
"27017/tcp": {}
},
...
我已经运行了图像,将内部端口绑定(bind)到我的主机上:
$ 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"]
最佳答案
Docker 创建一个网络命名空间,因此在您的容器中,您将看不到主机的暴露端口。
在您的用例中,您不需要使用 -p
运行 mongo如果您只需要从其他容器访问它。 --link
将简单地将链接的容器信息“注入(inject)”为环境变量。
在您的新容器中,您可以执行 env
查看列表,您将获得类似 DB_1_PORT_27027_TCP_ADDR
的内容使用可以连接的 mongo 容器的私有(private) IP。
关于mongodb - docker:显示来自链接容器的开放端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27146494/