我正在尝试使用 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/