我是 Docker 新手,正在尝试对我的 Laravel 应用程序进行 docker 化(版本 5.1)
以下是我的 docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test
ports:
- "3307:3306/tcp"
volumes:
- test_db:/var/lib/test_db/data
web:
build:
context: ../
dockerfile: deploy/Dockerfile
args:
APP_ENV: "local"
environment:
APP_DEBUG: "true"
DB_HOST: "db"
DB_DATABASE: "test"
DB_USERNAME: "root"
DB_PASSWORD: "root"
ports:
- "443:8000/tcp"
volumes:
- ../:/var/www/html
links:
- db
depends_on:
- db
restart: on-failure:10
container_name: test_web
volumes:
test_db:
当我执行docker-compose up
命令时,出现以下错误
[PDOException]
test_web | SQLSTATE[HY000] [2002] Connection refused
由于我设置了 10 次重试,因此它最终会连接并执行迁移,但我遇到以下问题:
- 为什么连接没有立即建立或在几次重试后建立?
- 我正在使用命名卷,但数据似乎没有持久化。每次我运行 docker-compose up 时,都会执行迁移并覆盖数据
请告诉我上述两个问题背后可能存在哪些问题
最佳答案
数据库启动总是很慢。
depends_on:
是一种影响 start 顺序的方法。
一种解决方案是修改 dockerfile 中的 CMD
,以等待某个条件。
我使用nc
(又名netcat)来测试db
的端口3306是否已准备好。
将 sleep 7200
替换为启动命令
CMD ["/bin/sh","-c", \
"( while ( ! nc -z db 3306 >/dev/null 2>&1 ) ; do \
date ; sleep 4 ; \
done ; \
sleep 7200 ; ) " ]
关于mysql - 将数据库附加到 Web 容器时,Docker 数据库连接拒绝错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58877172/