我有一个类似于以下内容的 Docker Composer 文件:
version: '2' services: db: image: mariadb:10.1 volumes: - "./.data/db:/var/lib/mysql" restart: always environment: MYSQL_ROOT_PASSWORD: test MYSQL_DATABASE: test MYSQL_USER: test MYSQL_PASSWORD: test test: depends_on: - db links: - db:db build: context: . args: MYSQL_HOST: db MYSQL_DATABASE: test MYSQL_USER: test MYSQL_PASSWORD: test ports: - "8000:80" restart: always
测试容器 Dockerfile 内部
FROM ... ... ARG MYSQL_HOST 127.0.0.1 RUN set -x; echo $MYSQL_HOST RUN script ... --param $MYSQL_HOST
但是 MYSQL_HOST
变量(我希望它是另一个容器的内部 IP)不会被转换为其他容器名称。
怎么能做到呢?可以用docker-compose以另一种方式实现吗?
最佳答案
我认为您不想在这里进行构建参数。可能会将 MYSQL_HOST 设置为环境变量。在 docker-compose 内部,文字字符串 db
实际上可以解析为您的数据库容器。
通常,撰写文件如下所示:
test:
links:
db:db
environment:
- MYSQL_HOST=db
然后在您的测试代码中执行以下操作:
...
String dbHost = System.getEnv("MYSQL_HOST");
...
这样,MySql 主机就不需要内置到您的镜像中,从而无需始终重建您的镜像。
关于Docker 链接容器作为构建参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39310309/