Я пытаюсь подключиться из одного контейнера докера в другой.контейнер, подключенный к докере, все порты закрыты
- Контейнер А имеет установлен Derby DB и начал, на порту 3301
- Контейнер B должен быть подключен к контейнеру
докер файлы выглядеть следующим образом: бака A
FROM java:8
# Install Derby
COPY db-derby-10.12.1.1-bin.tar.gz db-derby-10.12.1.1-bin.tar.gz
RUN mkdir /opt/Apache
RUN cp db-derby-10.12.1.1-bin.tar.gz /opt/Apache
RUN tar xzvf /opt/Apache/db-derby-10.12.1.1-bin.tar.gz
EXPOSE 3301
CMD ["/db-derby-10.12.1.1-bin/bin/startNetworkServer", "-p 3301"]
Контейнер B
FROM java:8
# Install nmap
RUN apt-get update
RUN apt-get install -y nmap
COPY db-derby-10.12.1.1-bin.tar.gz db-derby-10.12.1.1-bin.tar.gz
RUN mkdir /opt/Apache
RUN cp db-derby-10.12.1.1-bin.tar.gz /opt/Apache
RUN tar xzvf /opt/Apache/db-derby-10.12.1.1-bin.tar.gz
EXPOSE 9080
я начинаю как контейнер и дать им имена бака A
docker run -it --name derby <image>
Контейнер B
docker run -it --link derby:derby <image> /bin/bash
Тогда я прикрепить контейнер B и
ping derby or ping 172.17.0.2
, который является успешным. Но когда я пытаюсь подключиться к базе данных через дерби Cli инструмента и придания URL, как JDBC
connect 'jdbc:derby://172.17.0.2:3301/testdb;create=true';
я получаю отказ в соединении ошибки.
Использование Nmap для сканирования портов результатов контейнера в «Все порты закрыты» , который сбивает с толку, потому что Докер литературы гласит:
Так что же, связывающие контейнеры на самом деле? Вы узнали, что ссылка позволяет контейнеру-источнику предоставлять информацию о себе в контейнер-получатель. В нашем примере получатель, сеть, может получить доступ к информации о источнике db . Для этого Docker создает безопасный туннель между контейнерами, который не должен выставлять какие-либо порты снаружи на контейнере; вы заметите, что когда мы запустили контейнер db , мы не использовали флаги -P или -p. Это большое преимущество использования ссылок: нам не нужно выставлять исходный контейнер, вот базу данных PostgreSQL, в сеть.
Может быть, для меня есть подсказка или решение?
С уважением
Хорошо, я попробовал вариант 1, но результат тот же. внутри контейнера B я не могу подключиться к контейнеру A. nmap output: отчет о сканировании Nmap для дерби (172.17.0.2) Host up (0.000077s latency). ГОСУДАРСТВЕННАЯ СЛУЖБА ПОРТА 3301/tcp closed неизвестно MAC Адрес: 02: 42: AC: 11: 00: 02 (Неизвестно) Вариант 2 на самом деле не ясен, не мог бы я выполнить докер с хоста? –
AH!извините, я пропустил понимание, я не знал, что вы выполняете команду из другого контейнера. Когда docker создает ссылку, он также предоставляет кучу ENV vars в контейнере о ссылке. Используя их, вы можете настроить таргетинг на связанный компьютер ... http://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/ –
Итак, в контейнере, с которого вы пытаетесь запустить команду, будет существовать ENV var называется 'DERBY_PORT', и это будет содержать IP-адрес хоста и PORT-ссылки Derby –