【问题标题】:Docker link container as build argumentDocker 链接容器作为构建参数
【发布时间】: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 

标签: docker docker-compose


【解决方案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 问题中发表评论.. .
猜你喜欢
  • 2014-12-20
  • 2018-04-28
  • 2018-02-11
  • 1970-01-01
  • 2019-06-09
  • 2018-04-12
  • 2016-05-09
  • 1970-01-01
  • 2015-02-23
相关资源
最近更新 更多