我正在设置一个CakePHP 3.7应用程序并使用docker compose。我也尝试连接到mysql服务,但出现此错误:Access denied for user 'ws_user'@'172.20.0.3' (using password: YES)
我正在向用户授予权限,例如:GRANT ALL PRIVILEGES ON mydb.* TO 'ws_user'@'%' IDENTIFIED BY '<superSecretPasswordHere>'
。
如果我使用根凭据,则Cakephp可以使连接正常。
我还将3030端口上的mysql服务公开给我的本地计算机,并且能够使用ws_user凭据进行连接。
我还使用相同的凭据设置了在本地计算机上运行的mysql,cake也可以很好地连接到主机172.17.0.1
。
我很困惑,可能是问题所在。肯定这似乎是一个权限问题(由于错误消息),但是我能够通过命令行通过暴露的端口进行连接。我的下一个想法是,这可能是由于密码中的特殊字符引起的,但是,再次,如果我连接到在主机上运行的mysql,使用相同的密码也可以正常工作。
这是我的docker-compose文件:
version: '2'
# define all services
services:
# our service is called CakePHP ;-)
cakephp:
# we want to use the image which is build from our Dockerfile
build:
context: .
dockerfile: Dockerfile
# apache is running on port 80 but we want to expose this to port 4000 on our local machine
ports:
- "80:80"
# we are depending on the mysql backend
depends_on:
- mysql
# we mount the working dir into the container, handy for development
volumes:
- .:/var/www/html/
environment:
- SECURITY_SALT
- MYSQL_HOST
- MYSQL_USERNAME
- MYSQL_PASSWORD
mysql:
# we use the mysql base image, version 5.6.36
#image: mysql:5.6.39
build:
context: .
dockerfile: Dockerfile.mysql
ports:
- "3030:3006"
# we mount a datavolume to make sure we don't lose data
volumes:
- mysql_data:/var/lib/mysql
# setting some envvars to create the DB
environment:
- MYSQL_ROOT_PASSWORD
- MYSQL_DATABASE
volumes:
mysql_data:
答案 0 :(得分:1)
从“ cakephp”连接到“ mysql:3306”。这应该在您的连接字符串中。
您可以从主机连接到“ 127.0.0.1:3030”,以验证数据库是否接受远程登录。
然后,您应检查凭据是否相同。我建议您将它们放在.env文件中,然后通过“复制粘贴”值来测试连接。
您可以通过运行以下命令检查实际传递给容器的值:
docker-compose config
这将向您显示将发送到docker引擎的docker-compose文件的确切版本。
希望这行得通,否则请给我评论。