我希望能够连接到我的Docker容器,就像MySQL服务器安装在我的本地计算机上一样。我使用以下命令测试连接:
mysql -u root -proot -h 127.0.0.1 -P 3306 --protocol=tcp
如果我使用Docker创建一个容器,我可以成功地做到这一点。
docker run --name some-mysql-standalone -p 127.0.0.1:3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.29
如果我在docker-compose中使用容器作为服务,我会得到一个错误:
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 2
MySQL服务器在容器内运行,我可以访问它。
我的Docker编写代码段:
version: '2'
services:
mysql:
image: mysql:5.7.29
container_name: some_mysql
restart: unless-stopped
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/init:/docker-entrypoint-initdb.d
ports:
- 3306:3306
environment:
MYSQL_DATABASE: some_mysql
MYSQL_USER: root
MYSQL_PASSWORD: root
MYSQL_ROOT_PASSWORD: root
有趣的是,我已经使用docker-compose.yml
一段时间了,没有任何问题,我真的不知道我的环境发生了什么变化,导致它停止工作。
我怎样才能让我的mysql容器在docker-compose中从主机访问?
8条答案
按热度按时间eni9jsuy1#
首先,尝试在创建容器时设置
-e MYSQL_ROOT_HOST=%
。如果不起作用:一些docker映像忽略环境变量指令(如
-e MYSQL_ROOT_PASSWORD=<MY_PASSWORD> -e MYSQL_ROOT_HOST=%
),因此您必须手动在其他主机(%
)上添加(root)用户:docker exec -it <YOUR_CONTAINER_NAME> bash
mysql -u root -p<MY_PASSWORD>
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '<MY_PASSWORD>';
FLUSH PRIVILEGES;
zy1mlcev2#
正如7_R3X在这篇response中所说的那样,它似乎是对mysql服务器更安全的保护。
在我的例子中,我在一个构建在mysql:5.7之上的docker映像中运行服务,并且mysql服务器是通过调用**/etc/init.d/mysql start**而不是通过使用mysql官方映像的入口点启动的,因此它可能不适用于问题上下文,但它适用于mysql服务中指定的错误。
解决该问题的步骤包括:
sed -i "s/bind-address.*/bind-address = 0.0.0.0/g" /etc/mysql/mysql.conf.d/mysqld.cnf
/etc/init.d/mysql restart
然后,我能够从外部(与主机检查)访问Docker暴露端口
pcww981p3#
有时候我在停止和恢复我的虚拟机后会遇到这个错误。解决这个问题的方法是重新启动虚拟机。
mctunoxg4#
在this thread上发现类似错误。请查看是否更改了防火墙配置,并尝试将SQL Server绑定到
0.0.0.0
,而不是localhost
或127.0.0.1
。qncylg1j5#
从实际的Angular 来看,我通过显式创建一个网络**来使它工作。
我想既然我无法连接我应该尝试删除并创建一个新的网络,因为docker-compose在幕后为容器创建了一个单独的网络。我仍然不知道为什么我会遇到这个问题。
b5buobof6#
这帮助我解决了我的问题:使用以下命令创建容器
并登录到mysql
6psbrbz97#
此配置对我很有效:
hmmo2u0o8#
一个实际可行的变通方案(我不建议在不了解全部含义的情况下在prod上这样做,只是针对本地docker env):
alter user 'root'@'%' identified with mysql_native_password by 'password123'
配额转到https://laracasts.com/discuss/channels/laravel/caching-sha2-password-error-when-running-php-artisan-migrate?page=1&replyId=578038