为啥 docker-compose 不会为 mongo 打开端口?
Posted
技术标签:
【中文标题】为啥 docker-compose 不会为 mongo 打开端口?【英文标题】:Why docker-compose won't open ports for mongo?为什么 docker-compose 不会为 mongo 打开端口? 【发布时间】:2019-06-01 14:51:37 【问题描述】:我无法让 docker-compose 打开端口 27017 或至少允许 rest
与 mongo 建立连接。
无论如何,以下工作就好了:docker run -p 27017:27017 mongo:latest
这是我的docker-compose.yml
:
version: '3.5'
services:
mongo:
container_name: mongo
image: mongo:latest
ports:
- "27017:27017"
web:
container_name: web
build:
context: ./src/main/ui/
ports:
- "80:80"
rest:
container_name: rest
links:
- mongo
build:
context: .
ports:
- "8080:8080"
entrypoint: [ "java", "-jar", "/rest/build/libs/pBlog.jar" ]
docker ps
的输出(如您所见,mongo 中关闭了 27017 端口):
▶ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
08f5dfb7acb8 2d8ccd24817e "java -jar /rest/bui…" About an hour ago Up 11 minutes 0.0.0.0:8080->8080/tcp pblog_rest_1
4929257802c5 mongo "docker-entrypoint.s…" 2 hours ago Up 11 minutes 27017/tcp pblog_mongo_1
816a60eb9c7f pblog_web "nginx -g 'daemon of…" 3 days ago Up 11 minutes 0.0.0.0:80->80/tcp pblog_web_1
docker logs <mongoContainerId>
的输出:https://pastebin.com/raw/XZGUh4UC
docker logs <restContainerId>
的输出:https://pastebin.com/raw/F7rwKMCe(无法连接到数据库)
我尝试制作 shell 脚本以在容器内运行 mongo。还尝试将 mongo 服务中的端口部分编辑为"1-65535:1-65535"
(这应该打开所有端口) - 也不起作用。删除 ports
部分并添加 expose: - 27017
会得到相同的结果。
似乎 mongo 图像以某种方式迫使 docker 关闭端口。
【问题讨论】:
【参考方案1】:仅当您想从外部连接时才需要打开端口,这可能很有用,但对于您的场景,这不是必需的。 你的 rest 容器应该能够在这个 URL mongo:27017 下找到 mongo。 由于每个容器都将自己视为 localhost,因此它根本不会在 localhost 上看到其他容器。
注意:你已经成功打开了端口,你应该可以从你的 PC 上 ping 通它,但是从容器内部来看,网络看起来不同。
【讨论】:
谢谢!您的回答很有帮助,ping mongo
(在 rest 容器中运行)成功连接到我的数据库容器。还发现我无法打开端口,因为不知何故docker-compose start
正在读取旧的docker-compose.yml
,我不得不发出docker-compose up mongo
来更新服务配置。以上是关于为啥 docker-compose 不会为 mongo 打开端口?的主要内容,如果未能解决你的问题,请参考以下文章
转换为docker-compose后,Docker卷不会保留数据
为啥我的 docker-compose 卷没有使用本地文件添加进行更新?
为啥我无法从本地主机上的 Gitlab CI 连接到我的 docker-compose 服务