2016-09-10 3 views
0

У меня есть контейнер mysql, который отлично работает. Я могу запустить его и увидеть его и запустить в списке докеров ps.Избегайте жесткого кодирования контейнера mysql в моем сценарии контейнера apache

Затем я пытаюсь запустить другой контейнер learnitouch, в котором сценарий оболочки engine-db-seed.sh пытается подключиться к серверу контейнеров mysql.

learnitouch контейнер Dockerfile содержит:

ENTRYPOINT ["/bin/bash", "/usr/bin/learnintouch/engine-db-seed.sh"] 

Файл engine-db-seed.sh содержит:

/usr/bin/mysql/install/bin/mysql --protocol=tcp -h 172.17.0.2 -u root -proot -v < /usr/bin/learnintouch/db_engine-db.sql 

db_engine-db.sql в настоящее время посеяны все права в базе данных MySQL.

Но мне пришлось жестко закодировать контейнерный контейнер mysql, как вы можете видеть в опции -h. Я получил IP-адрес 172.17.0.2 от проверки докеров на контейнере mysql. Не самый автоматический способ ...

Как я могу обойтись без такой жесткой кодировки?

Запуск mysql контейнера:

docker run -d -p 3306:3306 -v /home/stephane/dev/php/learnintouch/docker/mysql/data:/usr/bin/mysql/install/data --name mysql stephane/mysql:5.6.30 

Запуск learnintouch контейнера:

docker run -p 127.0.0.1:80:80 --link mysql:mysql --name learnintouch stephane/learnintouch 

Я использую Docker версию 1.12.1, построить 23cf638

ответ

0

Просто используйте имя службы и убедитесь, что обе службы работают в одной сети (по умолчанию модем0).

Так что, если вы создаете службу MySQL, как этот

docker run -d --name foo mysql-image 

ваш engine-db-seed.sh может затем быть

/usr/bin/mysql/install/bin/mysql --protocol=tcp -h foo -u root -proot -v < /usr/bin/learnintouch/db_engine-db.sql 

MySQL сделает запрос DNS для foo которая будет решена Докер к ф из ваш foo сервис.

+0

Я не знал, что имя контейнера было предложено в качестве имени хоста службы. Благодаря ! – Stephane

Смежные вопросы