在其他容器中暴露mongo端口

Jea*_*eri 5 mongodb ssh-tunnel docker docker-image

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

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

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

Syl*_*wit 6

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

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

首先定义一个网络

docker network create --driver bridge isolated_nw
Run Code Online (Sandbox Code Playgroud)

使用新网络启动容器

docker run -p 27017:27017 --network=isolated_nw -itd --name=mongo-cont mongo
docker run --network=isolated_nw -itd --name=app your_image
Run Code Online (Sandbox Code Playgroud)

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


Dev*_*Dan 2

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

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

docker exec -it <container name> bash
$ root@665b4a1e17b6:/#
Run Code Online (Sandbox Code Playgroud)

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

docker run -it <image name> bash
$ root@665b4a1e17b6:/#
Run Code Online (Sandbox Code Playgroud)

注意:如果是基于Alpine的镜像,则可能没有安装 Bash。在这种情况下,在命令中使用sh而不是应该有效。bashMongo的Dockerfile看起来使用debian:jessie哪个都会有bash支持。