mysql - 使用 docker-compose Mysql + App

标签 mysql docker dockerfile docker-compose

我正在尝试使用 docker 链接两个容器。

MySQL Dockerfile:

...
EXPOSE 3306
CMD ["/usr/sbin/mysqld"]

应用程序 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, "Can't connect to MySQL server on 'rds' (111)")

编辑: 我不知道我是否需要稍等片刻才能启动应用程序 docker 。我想当应用程序尝试连接时 MySQL 没有启动。

最佳答案

这是一个已知问题,尚未解决。查看此链接 Docker services need to wait

您说得对,MySql 服务尚未启动,而您的 App 容器很快启动,因此当它尝试连接到 MySql 时,连接被拒绝。在应用程序方面,您可以编写一些重试逻辑。这些线上的东西

while(numberOfRetries > 0) {

try {

  // Try to connect to MySql
} catch(Exception e) {

     numberOfRetries--;

     if(numberOfRetries == 0)
       // log the exception 
}

希望这对您有所帮助。

关于mysql - 使用 docker-compose Mysql + App,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33419641/

相关文章:

c# - 找不到应用程序依赖项 list 中指定的程序集 :

java - Docker:获取部署在 Tomcat 上的服务特定日志

MySQL 组合数据 + 计数(*) 查询 2 个表

mysql - 从只有一条记录的表更新太慢

mysql - 是否有默认的 ORDER BY 值?

postgresql - 如何在运行 docker 之前启动 postgres

ruby - 如何在Docker Ruby-2.5.1 Alpine Linux上安装wkhtmltopdf?

Dockerfile supervisord 找不到路径

linux - 将 Jenkins 插件安装到 Docker Jenkins

mysql - 在hibernate中添加自表外键