为什么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”。