我正在创建一个包含PHP服务和MySQL服务的Docker Compose文件。作为MySQL容器初始化的一部分,我创建了一个新的MySQL用户,PHP容器将使用该用户来查询数据库。现在,我正在这样创建用户:
CREATE USER 'myuser'@'%' IDENTIFIED WITH mysql_native_password BY 'mypass';
GRANT INSERT, UPDATE, SELECT, DELETE ON mydb.* TO 'myuser'@'%';
这有效-我的PHP脚本可以成功查询MySQL数据库。
但是,我希望能够将用户限制在PHP容器中,而不是允许从任何地方('%'
)进行连接。我尝试过这样重新创建用户:
CREATE USER 'myuser'@'php' IDENTIFIED WITH mysql_native_password BY 'mypass';
GRANT INSERT, UPDATE, SELECT, DELETE ON mydb.* TO 'myuser'@'php';
但是,当我运行相同的PHP脚本时,出现此错误:
Access denied for user 'myuser'@'my-docker-container.my-docker-project_my-docker-network'
基于此错误,理论上我可以创建主机限制为my-docker-container.my-docker-project_my-docker-network
的用户。但是,在我的特定情况下,该主机字符串甚至更长,并且超过了MySQL规定的60个字符的限制。
是否可以配置我的容器,以便我的第二个示例('myuser'@'php'
)工作?
这是在docker-compose.yml
中定义PHP和MySQL服务的方式:
php:
image: my-php-image
container_name: my-php-container
build: ./php
networks:
- my-network
mysql:
image: my-mysql-image
container_name: my-mysql-container
build: ./mysql
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- my-mysql-volume:/var/lib/mysql
networks:
- my-network