Разобрать порт Монго в другом контейнере

У меня есть этот (пользовательский) контейнер, который запускает 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 служба поддержки.

Другие вопросы по тегам