【问题标题】:Expose mongo port in other container在其他容器中暴露 mongo 端口
【发布时间】:2017-01-28 19:57:40
【问题描述】:

我有这个(自定义)容器,它运行一个需要本地 mongo 的 java 程序。现在,使用 docker,我想在自己的容器中设置 mongo。所以我想,为了在这个 java 容器中本地公开这个 27017 端口,我需要设置一个 SSH 隧道,对吗?如果有更简单的方法请告诉我。

所以,有这个官方的mongo image 图像,但我得到的印象ssh 没有安装或运行。最好的方法是什么?

更新:我重新表述了这个问题,更关注端口转发here

【问题讨论】:

    标签: mongodb docker ssh-tunnel docker-image


    【解决方案1】:

    您可以在 mongodb 官方镜像之上构建您的自定义镜像,这使您可以灵活地安装其他所需的包。

    FROM mongo:latest
    RUN apt-get install ssh
    

    还可以尝试使用docker-compose 来构建和链接您的容器,这将大大简化该过程。

    version: '2'
    services:
      mongo:
        image: mongo:latest
        ports:
          - "27017"
    
      custom_project:
        build:
          context: .  # Parent directory address of Dockerfile
          dockerfile: Dockerfile-Custom  # Name of Dockerfile
        command: /root/docker-entrypoint.sh
    

    This是mongodb官方镜像使用的镜像。

    【讨论】:

      【解决方案2】:

      你必须让你的容器在同一个网络上运行。无需 ssh 进入您的 mongo 或应用程序容器。

      https://docs.docker.com/engine/userguide/networking/

      首先定义一个网络

      docker network create --driver bridge isolated_nw
      

      使用新的网络启动容器

      docker run -p 27017:27017 --network=isolated_nw -itd --name=mongo-cont mongo
      docker run --network=isolated_nw -itd --name=app your_image
      

      mongo 的映像包含 EXPOSE 27017,因此从您的应用容器中,您应该能够使用其名称 mongo-cont 访问 mongo 容器

      【讨论】:

      • java 应用程序以localhost:27017 访问数据库,所以我猜你的解决方案不能正常工作,对吧?
      • 编辑了我打开端口的答案
      • 另外提到你不能使用 localhost:27017 但你必须使用 mongo-cont:27017
      • 目前我无法更改 java 配置,所以我无法将 localhost:27017 更改为 mongo-cont:27017 这就是我查看 SSH 端口映射的原因
      【解决方案3】:

      您正在尝试通过 SSH 进入您的容器 以获取对其的访问权限,但这不是您连接的方式。 Docker 提供了通过以下方法安全连接的功能。

      连接到正在运行的容器 - Docs:

      docker exec -it <container name> bash
      $ root@665b4a1e17b6:/#
      

      从镜像启动一个容器,并连接到它 - Docs:

      docker run -it <image name> bash
      $ root@665b4a1e17b6:/#
      

      注意:如果它是基于 Alpine 的图像,它可能没有安装 Bash。在这种情况下,在您的命令中使用 sh 而不是 bash 应该可以工作。 Mongo 的Dockerfile 看起来使用debian:jessie,它将支持bash

      【讨论】:

      • 我需要将 db 端口映射到 java 容器,以便 java 应用程序可以以 localhost:27017 访问 db
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 2020-06-29
      • 2019-02-01
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      相关资源
      最近更新 更多