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

我有这个(自定义)容器运行一个Java程序,需要本地mongo。 现在,与docker工人,我想在自己的容器中设置mongo。 所以我想,为了在这个java容器本地公开这个27017端口,我需要build立一个SSH隧道,对吧? 如果有更简单的方法,请让我知道。

所以,这是官方的mongo镜像 ,但是我得到的印象是ssh没有安装或运行。 什么是最好的方法来做到这一点?

更新:我已经把这个问题重点放在这里的端口转发

你正试图通过SSH 进入你的容器来访问它,但这不是你连接的方式。 Docker提供了通过以下方法安全连接的function。

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

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

从图像启动一个容器,并连接到它 – 文档 :

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

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

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

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

首先定义一个networking

 docker network create --driver bridge isolated_nw 

使用新build的networking启动容器

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

您可以在mongodb官方图片的基础上构build自定义图像,从而使您可以灵活地安装额外的必需软件包。

 FROM mongo:latest RUN apt-get install ssh 

也尝试使用docker-compose来build立和链接你的容器,这将大大缓解这个过程。

 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官方图像的图像。