繁体   English   中英

使用docker-compose Mysql + App

[英]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指令:

  1. 创建一个运行状况检查脚本,成功时将exit 1select 1+1 from <table>或其他内容中select 1+1 from <table> 调用此health.sh

  2. 在Dockerfile中,将health.sh复制到容器中。

  3. 使用HEALTHCHECK CMD运行health.sh脚本。
  4. 在撰写文件中,修改您的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM