Docker链接容器作为构建参数

时间:2016-09-03 18:51:46

标签: docker docker-compose

我的Docker作曲家文件类似于:

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以另一种方式实现吗?

1 个答案:

答案 0 :(得分:2)

我不认为你想要一个构建参数。可能会将MYSQL_HOST设置为环境变量。在docker-compose中,文字字符串db实际上可以解析为您的数据库容器。

通常,撰写文件如下所示:

test:
   links:
     db:db
   environment:
     - MYSQL_HOST=db

然后在您的测试代码中执行以下操作:

...
String dbHost = System.getEnv("MYSQL_HOST");
...

这样,MySql主机不需要内置到您的映像中,无需一直重建您的映像。