我目前正在学习在Windows上使用Docker,并且正在关注此tutorial。对于Docker设置,我使用的是Laradock。我试图运行 mysql apache2 rabbitmq和phpmyadmin 容器,我所做的一切与视频中的相同,但是当我尝试迁移表时,出现以下错误:
Illuminate \ Database \ QueryException:SQLSTATE [HY000] [1045]用户'root'@'172.19.0.4'的访问被拒绝(使用密码:是)
我在phpmyadmin中创建了一个空数据库。
所有内容都在我的项目.env和laradock / .env中配置
我的项目环境:
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=my_database_name
DB_USERNAME=root
DB_PASSWORD=*********
我再次检查了密码,这是正确的。
我的laradock / .env配置:
MYSQL_VERSION=latest
MYSQL_DATABASE=my_database_name
MYSQL_USER=root
MYSQL_PASSWORD=******
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=******
Docker-compose.yml配置:
mysql:
build:
context: ./mysql
args:
- MYSQL_VERSION=${MYSQL_VERSION}
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- TZ=${WORKSPACE_TIMEZONE}
volumes:
- ${DATA_PATH_HOST}/mysql:/var/lib/mysql
- ${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d
ports:
- "${MYSQL_PORT}:3306"
networks:
- backend
为确保所有容器均正常工作,请输入以下命令,并得到以下响应:
docker-compose ps
Response from previous command
我的phpmyadmin中的root用户:
答案 0 :(得分:1)
可能与bind-address
仅接受本地主机连接有关。看看这个如何在MySQL容器中使用custom mysqld.conf的示例
答案 1 :(得分:1)
实际上,您不能在Docker的mymethod
文件中创建def mymethod(self, *, arg1: Optional[int] = None, **kwargs) -> None:
...
用户。根用户默认情况下是创建的,如果要使用它,只需为其设置密码:mypy
在laradock中。然后,如果您要创建另一个用户,请设置mymethod
和Parent
因此在laradock / .env文件中:
root
现在,您可以在laravel项目中使用.env
用户或MYSQL_ROOT_PASSWORD
用户:
MYSQL_USER
请记住,要在laradock中连接到正确的数据库主机,应该在laravel中使用MYSQL_PASSWORD
而不是MYSQL_VERSION=5.7
MYSQL_DATABASE=my_database_name
MYSQL_USER=myusername // any name other than root
MYSQL_PASSWORD=mypassword
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=rootPassword // password to root user
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d
:
root
答案 2 :(得分:0)
设法通过将我的.env mysql用户名和密码配置更改为解决此问题:
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=my_database_name
DB_USERNAME=root
DB_PASSWORD=root
并将laradock / .env配置中的mysql版本更改为:
MYSQL_VERSION=5.7
MYSQL_DATABASE=my_database_name
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=root
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d
此后,我停止了所有容器:
docker-compose down
下一步是使用新配置构建mysql容器:
docker-compose build --no-cache mysql
此外,我再次运行所有容器
docker-compose up -d mysql apache2 rabbitmq phpmyadmin
导航到工作区工作目录,并迁移了我的表:
php artisan migrate
一切都按预期进行:
迁移表创建成功。
迁移:2018_11_28_114446_create_accounts_table
已迁移:2018_11_28_114446_create_accounts_table
答案 3 :(得分:0)
对我有好处:
rm -rf /root/.laradock
答案 4 :(得分:0)
如果您使用Laradock,则所有内容都会在 laradock / mariadb / docker-entrypoint-initdb.d / createdb.sql.example
中进行解释您必须删除文件夹$ DATA_PATH_HOST / mariadb,然后在 /docker-entrypoint-initdb.d/myScript.sql
中创建新用户。示例:
DROP USER IF EXISTS 'user'@'%' ;
FLUSH PRIVILEGES;
CREATE USER 'user' IDENTIFIED BY 'pass';
GRANT USAGE ON *.* TO 'user'@'%' IDENTIFIED BY 'pass';
GRANT ALL privileges ON *.* TO 'user'@'%';
CREATE DATABASE IF NOT EXISTS `symfonydb1` COLLATE 'utf8_general_ci';
FLUSH PRIVILEGES;