我有这个(自定义)容器,它运行一个需要本地mongo的java程序。现在,使用docker我想在自己的容器中设置mongo。所以我想,为了在这个java容器中本地暴露这个27017端口,我需要设置一个SSH隧道,对吗?如果有更简单的方法请告诉我。
所以,有这个官方mongo image图片,但我得到的印象是ssh
未安装或正在运行。这样做的最佳方法是什么?
更新:我更改为关注端口转发的问题here
答案 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