为什么docker-compose不从MySQL容器中查找IP地址?

时间:2017-03-06 18:43:56

标签: docker docker-compose

我的own_app需要一个MySQL数据库。问题是own_app容器需要ip数据库的ip。我的目标是使用docker-compose.yml来解决这个问题。

Dockerfile

ENTRYPOINT ["docker-entrypoint.sh"]

搬运工-compose.yml

基于Wordpress example,docker-compose.yml稍作修改,如下所示:

version: '2'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: wordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   own_app:
     depends_on:
       - db
     image: own_app:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       MYSQL_DB_HOST: db:3306
volumes:
    db_data:

但它会插入db:3306

db.default.url="jdbc:mysql://db:3306/database_name"

而不是IP地址

问题

驻留在docker-entrypoint.sh中的sed语句运行良好,即它将localhost替换为$ MYSQL_DB_HOST环境变量。问题是docker-compose返回db:3306而不是<ip>:3306

问题

为什么docker-compose没有查找IP地址?

1 个答案:

答案 0 :(得分:3)

docker-compose中的环境变量只是字符串,它不知道它是主机名还是任何其他文本。唯一解析是用${varname}语法扩展变量。

要将容器连接在一起,无论如何都不需要IP地址,它们可以更改。使用基于DNS的发现,它将解析同一网络上任何其他容器中服务名称的“db”。