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

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

Dockerfile

ENTRYPOINT ["docker-entrypoint.sh"] 

泊坞窗,compose.yml

基于Wordpress示例 ,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语句工作正常,即用$ MYSQL_DB_HOST环境variablesreplacelocalhost。 问题是docker-compose返回db:3306而不是<ip>:3306

为什么docker-compose查不到IP地址?

docker-compose中的环境variables只是string,它不知道它是主机名还是其他文本。 所做的唯一parsing是在${varname}语法中展开variables。

为了将容器连接在一起,无论如何你都不需要IP地址,它们可以改变。 使用基于DNS的发现,它将parsing位于同一networking上的任何其他容器中的服务名称中的“db”。