2015-12-05 2 views
1

У меня есть контейнер с Dockerfile следующим образом:Докер - не в состоянии TelNet Связанный контейнер

... 
FROM ubuntu:latest 
MAINTAINER arpitaggarwal "[email protected]" 
EXPOSE 8080 

и другой контейнер B с Dockerfile следующим образом:

... 
FROM ubuntu:latest 
MAINTAINER arpitaggarwal "[email protected]" 
RUN apt-get install -q -y mysql-server 
EXPOSE 3306 

Тогда я запустил контейнер B с использованием команды:

docker run -P -it --name db B /bin/bash 

И выполнив команду: docker run --rm --name web --link db A env

дает мне ниже выхода:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
HOSTNAME=a5dd66b72ca8 
DB_PORT=tcp://172.17.0.2:3306 
DB_PORT_3306_TCP=tcp://172.17.0.2:3306 
DB_PORT_3306_TCP_ADDR=172.17.0.2 
DB_PORT_3306_TCP_PORT=3306 
DB_PORT_3306_TCP_PROTO=tcp 
DB_NAME=/web/db 
HOME=/root 

Затем я вошел в контейнер и запустить команду: пинг дб

, который дает мне

PING db (172.17.0.2) 56(84) bytes of data. 
64 bytes from db (172.17.0.2): icmp_seq=1 ttl=64 time=0.082 ms 
64 bytes from db (172.17.0.2): icmp_seq=2 ttl=64 time=0.063 ms 
64 bytes from db (172.17.0.2): icmp_seq=3 ttl=64 time=0.065 ms 
64 bytes from db (172.17.0.2): icmp_seq=4 ttl=64 time=0.061 ms 
64 bytes from db (172.17.0.2): icmp_seq=5 ttl=64 time=0.066 ms 

И когда я попытался telnet команду с портом 3306, следующим образом:

telnet 172.17.0.2 3306 

дает мне выход:

[email protected]:/# telnet 172.17.0.2 3306 
Trying 172.17.0.2... 
telnet: Unable to connect to remote host: Connection refused 

Любая идея, как я могу TelNet связанный контейнер?

Любая помощь будет оценена!

+0

И вы уверены, что MySQL правильно установлен в B и прослушивает внешние соединения на порту? –

+0

Я установил mysql-клиент, выполнил вход в mysql-сервер и выполнил операции запроса, а также для внешних подключений. Я не уверен. – Arpit

ответ

2

MySQL обычно только слушает по 127.0.0.1 по умолчанию. Вам необходимо изменить my.cnf во время сборки и установить bind-address на 0.0.0.0. Вы можете сделать это с чем-то вроде:

RUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf 
+0

Это сработало, спасибо :), также добавив новый ответ на вопрос, чтобы разрешить соединение с mysql после добавления 'RUN sed -i -e 's/^ bind-address \ s * = \ s * 127.0.0.1/bind -address = 0.0.0.0/ "/ etc/mysql/my.cnf' в DockerFIle. – Arpit

1

После получения ответа на @Andy Шинн, я Обновил контейнер B Dockerfile, как показано ниже:

FROM ubuntu:latest 
MAINTAINER arpitaggarwal "[email protected]" 
RUN apt-get install -q -y mysql-server 
RUN apt-get install -q -y mysql-client 
RUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf 
EXPOSE 3306 

И когда я попытался доступа mysql- сервер из контейнера как:

mysql -u root -ppassword -h 172.17.0.2 

дает мне ошибку:

ERROR 1130 (HY000): Host '172.17.0.3' is not allowed to connect to this MySQL server 

Что я понял это происходит потому, контейнер пытается подключиться к БД контейнера через суперпользователя. Но в mysql не разрешается удаленно подключаться через root-пользователя. Поэтому я работаю над созданием другого пользователя в mysql-сервере с привилегиями root.