使用docker-compose编排, 首次部署连接数据库出现Connection refused的错误
1. 运行环境
Ubuntu 20.04
Docker 20.10.10
docker-compose version 1.25.0
1). 当前使用的 Laravel 版本?
Laravel Framework 8.69.0
2). 当前使用的 php/php-fpm 版本?
PHP 版本:7.4
php-fpm 版本:7.4
3). 当前系统
Ubuntu 20.04
4). 业务环境
开发环境
5). 相关软件版本
- nginx/1.21.4
- Redis6.2.6
- Mysql 5.7
- PHP7.4
2. 问题描述?
使用Jenkins自动化构建+部署, 首次部署执行 php artisan migrate
会提示 SQLSTATE[HY000] [2002] Connection refused
的错误,
但手动执行 docker-compose exec php php artisan migrate
就可以成功迁移数据库文件, 且之后的部署也不会出现上述错误. 也使用过sleep再执行也是一样(首次部署), 看下是否有更好的方式还是什么地方错了?
.env文件
...
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=dbname
DB_USERNAME=dbuser
DB_PASSWORD=dbpwd
...
docker-compose.yml
mysql:
image: mysql:5.7.29
container_name: mysql
restart: unless-stopped
tty: true
command: --default-authentication-plugin=mysql_native_password
volumes:
- ./db:/var/lib/mysql:rw
environment:
MYSQL_DATABASE: dbname
MYSQL_USER: dbuser
MYSQL_PASSWORD: dbpwd
MYSQL_ROOT_PASSWORD: dbpwd.root
SERVICE_TAGS: dev
SERVICE_NAME: mysql
networks:
- laravel
脚本内容
#!/usr/bin/env bash
chmod o+w .env
sleep 5
CALL_FUNC=${1:-'default'}
default() {
. .env
php artisan config:clear
php artisan cache:clear
php artisan cache:clear
php artisan migrate
php-fpm7.4 -F
}
queue() {
queue_name=${2:-'default'}
php artisan queue:work --name="$queue_name" --queue="$queue_name" --verbose --tries=3 --timeout=60
while [ $? -ne 0 ];do
sleep 3
queue
done
}
scheduler() {
while true; do
php artisan schedule:run --verbose && sleep 60
done
}
$CALL_FUNC
推荐文章: