我有一个运行正常的mysql
容器。我可以启动它并在docker ps列表中查看并运行。
然后我尝试运行另一个learnitouch
容器,其中engine-db-seed.sh
shell脚本尝试连接到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
容器上的docker inspect获取了mysql
IP地址。不是最自动化的方式...
如果没有这样的硬编码怎么办?
运行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)
只需使用服务名称并确保两个服务在同一网络上运行(默认情况下为bridge0)。
所以如果你像这样创建你的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将发出foo
的dns请求,Docker会将其解析为foo
服务的IP。