4

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

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

更新:我在这里改写了更关注端口转发的问题

4

3 回答 3

3

您可以在 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

是用于 mongodb 官方镜像的镜像。

于 2016-09-23T04:57:26.310 回答
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 容器mongo-cont

于 2016-09-20T19:21:27.250 回答
2

您正在尝试通过 SSH连接到您的容器以访问它,但这不是您连接的方式。Docker 提供了通过以下方法安全连接的功能。

连接到正在运行的容器 -文档

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

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

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

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

于 2016-09-20T19:11:26.720 回答