Docker 链接容器作为构建参数
Posted
技术标签:
【中文标题】Docker 链接容器作为构建参数【英文标题】:Docker link container as build argument 【发布时间】:2017-01-11 15:03:04 【问题描述】:我有一个 Docker 作曲家文件,类似于:
版本:'2' 服务: D b: 图片:mariadb:10.1 卷: - “./.data/db:/var/lib/mysql” 重启:总是 环境: MYSQL_ROOT_PASSWORD:测试 MYSQL_DATABASE:测试 MYSQL_USER:测试 MYSQL_PASSWORD:测试 测试: 取决于: - D b 链接: -分贝:分贝 建造: 语境: 。 参数: MYSQL_HOST:分贝 MYSQL_DATABASE:测试 MYSQL_USER:测试 MYSQL_PASSWORD:测试 端口: - “8000:80” 重启:总是测试容器Dockerfile内部
从 ... ... ARG MYSQL_HOST 127.0.0.1 运行设置-x;回声 $MYSQL_HOST 运行脚本 ... --param $MYSQL_HOST但是 MYSQL_HOST
变量(我希望它是另一个容器的内部 IP)没有被转换为另一个容器名称。
怎么可能呢?可以用 docker-compose 用另一种方式实现吗?
【问题讨论】:
MYSQL_HOST 包含什么值? MYSQL_HOST 应该引用另一个容器的主机名/IP... 好的,但是现在包含什么,与您当前的作曲家文件有关? 上面可以看到:... args: MYSQL_HOST: db【参考方案1】:
我认为您不希望在此处使用构建参数。可能会将 MYSQL_HOST 设置为环境变量。在 docker-compose 内部,文字字符串 db
实际上可以解析到您的数据库容器。
通常,撰写文件如下所示:
test:
links:
db:db
environment:
- MYSQL_HOST=db
然后在您的测试代码中执行以下操作:
...
String dbHost = System.getEnv("MYSQL_HOST");
...
这样,MySql 主机不需要内置到您的镜像中,从而无需一直重建您的镜像。
【讨论】:
感谢您的建议。遗憾的是,该代码已在现有应用程序中,它实际上用于生成配置文件以供正在运行的应用程序读取(此代码:mediawiki.org/wiki/Manual:Install.php)。似乎它必须与构建参数一起使用,因为在构建过程中忽略了环境。 听起来你的构建依赖于外部网络对另一个容器的访问。按照设计,镜像应该能够在没有外部依赖的任何 docker 主机上构建,并且 docker 并不真正支持您收集依赖项所需的方法。充其量,您可以有一个预构建步骤,从外部来源收集设置并将这些设置作为参数直接注入到图像构建中。 谢谢。你说得对。实际上,我可以使用 Bash 脚本命令来执行此操作,例如:“docker inspect --format ' .NetworkSettings.IPAddress ' db` 如果将来可能出现这种情况,我将在 docker-compose 问题中发表评论.. .以上是关于Docker 链接容器作为构建参数的主要内容,如果未能解决你的问题,请参考以下文章
Docker下构建centos7容器无法使用systemctl命令的解决办法
Docker&Kubernetes ❀ Docker 容器技术笔记链接梳理