Разобрать порт Монго в другом контейнере
У меня есть этот (пользовательский) контейнер, который запускает Java-программу, которая требует монго локально. Теперь с помощью докера я бы хотел установить монго в свой собственный контейнер. Так что я предполагаю, что для того, чтобы локально выставить этот порт 27017 в этот java-контейнер, мне нужно настроить SSH-туннель, верно? Если есть более простой способ, пожалуйста, дайте мне знать.
Итак, есть это официальное изображение монго, но у меня сложилось впечатление ssh
не установлен или не работает. Каков наилучший подход для этого?
ОБНОВЛЕНИЕ: я перефразировал вопрос, более сосредоточенный на переадресации порта здесь
3 ответа
Вы должны заставить свой контейнер работать в той же сети. Не нужно ssh в ваш монго или контейнер приложений.
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
Вы можете создать свой собственный образ поверх официального образа 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 в своем контейнере, чтобы получить к нему доступ, но это не то, как вы подключаетесь. Docker предоставляет функциональные возможности для безопасного соединения следующими способами.
Подключиться к работающему контейнеру - Документы:
docker exec -it <container name> bash
$ root@665b4a1e17b6:/#
Запустите контейнер из изображения и подключитесь к нему - Docs:
docker run -it <image name> bash
$ root@665b4a1e17b6:/#
Примечание. Если это образ Alpine, возможно, на нем не установлен Bash. В этом случае с помощью sh
вместо bash
в твоих командах должно работать. Монго Dockerfile выглядит использовать debian:jessie
который будет иметь bash
служба поддержки.