Docker 链接容器作为构建参数

标签 docker docker-compose

我有一个类似于以下内容的 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/

相关文章:

docker - 什么是最简单的合理Kubernetes设置?

python - docker-compose 与 postgres 的 Django 连接

尽管服务正在运行,但 Docker 容器会立即退出

mongodb - 如何在 docker-compose 上为 mongodb 初始化一个新的用户和数据库

amazon-web-services - 我可以使用docker-compose build创建容器镜像吗?

php - Docker的PHP代码接收

docker - 使用 API v2 将图像上传到 Docker Registry 时出错

docker - 如何在 Mesos 或 CoreOS 中配置 MariaDB 和 Redis 的高可用集群

docker - 如何查找容器是如何启动的 : "docker run" or "docker-compose up"?

docker - traefik:获得与服务副本一样多的前端(预计只有一个)