[英]Java app not connecting with mysql container using docker-compose
[英]Using docker-compose Mysql + App
我试图使用docker链接两个容器。
MySQL Dockerfile:
...
EXPOSE 3306
CMD ["/usr/sbin/mysqld"]
App Dockerfile:
...
ADD . /services
CMD ["python", "-u", "services/run_tests.py"]
在我使用的run_tests.py中
self.db = MySQLdb.connect(host="mysql", user="XYZ", passwd="XYZ", db="TEST_DB")
在我的docker-compose.yml中:
app:
build: .
links:
- mysql
mysql:
image: XYZ/KJM
当我运行docker-compose up
我无法连接到mysql容器。
OperationalError:(2003,“无法连接到'rds'(111)上的MySQL服务器”)
编辑:我不知道我是否需要等待启动app docker。 我想应用程序尝试连接时MySQL不起作用。
这是一个已知问题,尚未解决。 看看这个链接Docker服务需要等待
当你的App容器很快出现时,你的MySql服务还没有完全正确,因此当它尝试连接到MySql时,连接被拒绝。 在应用程序方面,您可以做的是您可以编写一些重试逻辑。 这些线上的东西
while(numberOfRetries > 0) {
try {
// Try to connect to MySql
} catch(Exception e) {
numberOfRetries--;
if(numberOfRetries == 0)
// log the exception
}
希望这可以帮助。
自Docker 1.13以来,这已成为一个已解决的问题。 您现在可以在MySQL Dockerfile中使用HEALTHCHECK
指令:
创建一个运行状况检查脚本,成功时将exit 1
: select 1+1 from <table>
或其他内容中select 1+1 from <table>
。 调用此health.sh
。
在Dockerfile中,将health.sh
复制到容器中。
HEALTHCHECK CMD
运行health.sh
脚本。 在撰写文件中,修改您的app
定义:
\n 版本:2.1\n\n 应用:\n 建造:。\n 链接:\n - mysql\n 依赖于取决于:\n MySQL的:\n 条件:service_healthy\n
我认为你是对的,你需要等待。 您可以在循环中尝试连接,并在每次尝试之间以短暂睡眠重试几次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.