为什么docker-compose不会为mongo打开端口?

时间:2019-01-06 21:05:28

标签: mongodb docker docker-compose

我无法使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关闭端口。

1 个答案:

答案 0 :(得分:0)

仅当您要从外部连接时才需要打开端口,这可能很有用,但对于您的情况来说是没有必要的。 您的rest容器应该可以在此URL mongo:27017下找到mongo。 由于每个容器将自己视为本地主机,因此根本不会在localhast上看到其他容器。

注意:您已经成功打开了端口,应该可以从PC ping通该端口,但是从容器内部看,网络看起来会有所不同。