我有一个配方,它使用我为我的应用程序制作的特定 mysql 图像设置一个 docker 实例。作为该配方的一部分,我希望它在容器运行 mysql 后,从备份中恢复数据的过程将自动开始。
为此,我需要拥有容器的 IP(或从 DNS 获取它的方法)。但是,由于我从配方中自动启动容器,因此我无法知道该 IP 将是什么,因此我试图让 docker 为其设置一个稍后可以解析的主机名。
奇怪的是,如果我将一个容器链接到另一个容器,我将能够从链接到它的容器中解析另一个容器的主机。但是,我发现无法从主机解析该主机名。
这是我用来调出容器的食谱(厨师)的一部分:
docker_container 'imhere-mysql' do
hostname mysqlHost
repo 'lutraman/imhere'
tag 'mysql'
env ["MYSQL_ROOT_PASSWORD=#{mysql_password}"]
volumes [ '/var/imhere/mysql:/var/lib/mysql' ]
action :run
end
我想用来恢复数据的命令是这样的(根据配方构建):
"gunzip -c #{parent_data_dir}/#{db_restore_filename} | mysql -h #{mysqlHost} -u root -p'#{mysql_password}'"
仅从主机运行,mysqlHost
(在手头的情况下 - imhere-mysql
)中的名称不会从主机解析。
本文底部有一条说明,说应该有一个 docker dns 服务器在 127.0.0.11 上运行 - 但我担心这是容器内部的。
我希望我能够做的是查询 docker(在理想情况下,作为 DNS,但任何方式都可以)以获取名为“imhere-mysql”的容器的 ip。无论主机操作系统如何,最好的方法是什么?