尝试使用docker-compose.yml,而不是像这样单独启动容器:
docker container run --name mysql -d -e MYSQL_RANDOM_ROOT_PASSWORD=yes -e MYSQL_DATABASE=currency -e MYSQL_USER=currency -e MYSQL_PASSWORD=currency mysql/mysql-server:5.7
docker run --name currency -d -p 8000:5000 --rm --link mysql:dbserver -e DATABASE_URL=mysql+pymysql://currency:currency@dbserver/currency currency:latest
单独运行时,flask应用程序会正确地找到数据库的url并使用mysql db。
我使用的docker-compose.yml文件如下:
version: "2"
services:
mysql:
image: mysql/mysql-server:5.7
environment:
- MYSQL_RANDOM_ROOT_PASSWORD:yes
- MYSQL_DATABASE:currency
- MYSQL_USER:currency
- MYSQL_PASSWORD:currency
currency:
build: .
links:
- "mysql:dbserver"
ports:
- "8000:5000"
environment:
- DATABASE_URL:"mysql+pymysql://currency:currency@dbserver/currency"
当我使用docker-compose.yml时,它没有使用mysql数据库。我相信,由于docker-compose.yml中的一些错误,flask应用程序无法看到环境变量“database\u url”。docker-compose.yml出了什么问题?
1条答案
按热度按时间gijlo24d1#
第一:确保不要使用链接
这个
--link
标志是docker遗留的特性。它最终可能会被移除。除非您确实需要继续使用它,否则我们建议您使用用户定义的网络来促进两个容器之间的通信,而不是使用--link
.用户定义的网络不支持的一个特性是可以使用link在容器之间共享环境变量。但是,可以使用其他机制(如卷)以更受控制的方式在容器之间共享环境变量。
第二,做一个
docker exec -it currency bash
在货币容器中打开会话,并执行echo "DATABASE_URL='${DATABASE_URL}'"
其中,检查环境变量是否已设置。最后,在您的案例中检查这是否是一个订购问题(在数据库完全启动之前启动货币)
请参阅“控制组合中的启动顺序”。
例如: