我的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地址?
答案 0 :(得分:3)
docker-compose中的环境变量只是字符串,它不知道它是主机名还是任何其他文本。唯一解析是用${varname}
语法扩展变量。
要将容器连接在一起,无论如何都不需要IP地址,它们可以更改。使用基于DNS的发现,它将解析同一网络上任何其他容器中服务名称的“db”。