将mongo端口暴露在其他容器中

时间:2016-09-20 18:55:01

标签: mongodb docker ssh-tunnel docker-image

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

所以,有这个官方mongo image图片,但我得到的印象是ssh未安装或正在运行。这样做的最佳方法是什么?

更新:我更改为关注端口转发的问题here

3 个答案:

答案 0 :(得分:2)

您正在尝试将 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

答案 1 :(得分:2)

您可以在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 :(得分:1)

您必须使容器在同一网络上运行。无需ssh到您的mongo或app容器中。

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容器。