我无法使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
的输出(如您所见,端口27017在mongo中已关闭):
▶ 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关闭端口。
答案 0 :(得分:0)
仅当您要从外部连接时才需要打开端口,这可能很有用,但对于您的情况来说是没有必要的。 您的rest容器应该可以在此URL mongo:27017下找到mongo。 由于每个容器将自己视为本地主机,因此根本不会在localhast上看到其他容器。
注意:您已经成功打开了端口,应该可以从PC ping通该端口,但是从容器内部看,网络看起来会有所不同。