在Local -Host跑步时,我的项目工作正常。但是,在运行Docker在生产中使用命令
sudo docker-compose up -d --build
组成后,输入WebApp URL时,我会看到错误:
驱动程序中发生了例外:sqlstate [hy000] [1045]访问被拒绝 对于用户'user'@'172.20.0.3'(使用密码:是)我的docker-compose.yml是
version: '3'
services:
database:
build:
context: ./database
environment:
- MYSQL_DATABASE=${DATABASE_NAME}
- MYSQL_USER=${DATABASE_USER}
- MYSQL_PASSWORD=${DATABASE_PASSWORD}
- MYSQL_ROOT_PASSWORD=${DATABASE_ROOT_PASSWORD}
ports:
- "3306:3306"
volumes:
- ./database/init.sql:/docker-entrypoint-initdb.d/init.sql
- ./database/data:/var/lib/mysql
networks:
- webappnet
php-fpm:
build:
context: ./php-fpm
depends_on:
- database
environment:
- APP_ENV=${APP_ENV}
- APP_SECRET=${APP_SECRET}
- DATABASE_URL=mysql://${DATABASE_USER}:${DATABASE_PASSWORD}@database:3306/${DATABASE_NAME}?serverVersion=mariadb-10.6.4
- PODIO_CLIENT_ID=${PODIO_CLIENT_ID}
- PODIO_CLIENT_SECRET=${PODIO_CLIENT_SECRET}
- DEFAULT_MAIL_FROM=${DEFAULT_MAIL_FROM}
- SMTP_SERVER=${SMTP_SERVER}
- MAILER_DSN=${MAILER_DSN}
- MAILTO=${MAILTO}
volumes:
- ../src:/var/www
- ./php-fpm/php.ini:/usr/local/etc/php/conf.d/php.override.ini:ro
nginx:
build:
context: ./nginx
tty: true
volumes:
- ../src:/var/www
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/sites/:/etc/nginx/sites-available
- ./nginx/conf.d/:/etc/nginx/conf.d
- ./nginx/sites/site.conf:/etc/nginx/conf.d/site.conf
- ./logs:/var/log/nginx/
depends_on:
- php-fpm
links:
- php-fpm
ports:
- "8000:80"
networks:
- webappnet
my.env文件的变量已声明:
DATABASE_NAME=dbname
DATABASE_USER=user
DATABASE_PASSWORD=password
DATABASE_ROOT_PASSWORD=adminpassword
I还尝试输入数据库容器并手动输入数据库。但是输入命令
mysql -u user -p
,当询问时,密码password
返回相同的错误:ERROR1045(28000):访问用户'用户'@'localhost'(使用 密码:是)
我看不到我在做什么错,它在Localhost上工作...
我找到了一个解决方案,也许不是最好的解决方案,但它是一个负担得起的解决方案,因为生产机器尚未工作,数据库几乎是空的。
它似乎在数据上损坏了,我删除了数据库,删除了Docker容器,图像和所有内容,然后我再次开始了Docker-Compose。小心! 放 环境: -Mysql_user = $ {database_user} -MySQL_Password = $ {database_password} 在所有服务中