我有这个(自定义)容器,它运行一个需要本地 mongo 的 java 程序。现在,使用 docker,我想在自己的容器中设置 mongo。所以我想,为了在这个 java 容器中本地公开这个 27017 端口,我需要设置一个 SSH 隧道,对吗?如果有更简单的方法请告诉我。
所以,有这个官方的mongo image image,但我得到的印象ssh
是没有安装或运行。这样做的最佳方法是什么?
更新:我在这里改写了更关注端口转发的问题
我有这个(自定义)容器,它运行一个需要本地 mongo 的 java 程序。现在,使用 docker,我想在自己的容器中设置 mongo。所以我想,为了在这个 java 容器中本地公开这个 27017 端口,我需要设置一个 SSH 隧道,对吗?如果有更简单的方法请告诉我。
所以,有这个官方的mongo image image,但我得到的印象ssh
是没有安装或运行。这样做的最佳方法是什么?
更新:我在这里改写了更关注端口转发的问题
您可以在 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 官方镜像的镜像。
你必须让你的容器在同一个网络上运行。无需 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
您正在尝试通过 SSH连接到您的容器以访问它,但这不是您连接的方式。Docker 提供了通过以下方法安全连接的功能。
连接到正在运行的容器 -文档:
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
支持。