我使用官方的mysql 5.5 docker作为数据库容器。 第一个拉容器:
docker pull mysql:5.5
然后我跑:
docker run --name mysqldb -e MYSQL_ROOT_PASSWORD=testword mysql:5.5
它运行成功,容器mysqldb与ip是172.17.0.20.And我可以通过这个访问这个mysqldb:
mysql -h 172.17.0.20 -u root -p # this command from 172.17.0.23
输入密码,然后我明白了:
mysql>
这是对官方mysql的测试。我可以从远程主机/容器访问mysqldb。 然后我想使用主机目录(存储一些数据库),所以我这样做:
docker run --name mysqldb_with_data -v /var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=testword mysql:5.5
运行成功。但是当我想用ip 172.17.0.21访问这个mysqldb_with_data容器时,我遇到了一个错误:
mysql -h 172.17.0.251 -u root -p # this command from 172.17.0.23
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'172.17.0.23' (using password: YES)
我只是使用主机数据来替换mysql容器的数据,但是我无法从远程主机/容器访问mysqldb。我不知道为什么。
答案 0 :(得分:0)
答案 1 :(得分:0)
我也有同样的问题。这是因为我已将容器中的/var/lib/mysql
复制到主机操作系统上的/var/lib/mysql
:
docker cp <container name>:/var/lib/mysql/ /var/lib/
要以正确的方式复制/ var / lib / mysql,您需要执行以下操作:
docker inspect <container name> | grep -A7 Mounts | grep Source
"Source":"/var/lib/docker/volumes/5a5fcb8c277c6a28f6eea2d156b5703cfc9feb86786ecf61caab95d803773647/_data",
docker stop <container name>
/var/lib/mysql/
mkdir /var/lib/mysql/
cp -a /var/lib/docker/volumes/5a5fcb8c277c6a28f6eea2d156b5703cfc9feb86786ecf61caab95d803773647/_data/* /var/lib/mysql/
完成此操作后,您将能够按预期使用dockerized mysql。
所以,基本上问题在于mysql数据文件,而不是dockerezation。为了使它们处于一致状态,应在DB停止时复制它们。