为啥 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 服务

为啥 docker-compose build 没有给我这样的文件或目录错误消息

wekan 工具配置

为啥我在Ubuntu下通过apt-get安装的docker-compose没有down命令?