挂载目录时无法连接到mysql docker

时间:2015-10-21 11:56:04

标签: mysql docker dockerhub

我使用官方的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。我不知道为什么。

2 个答案:

答案 0 :(得分:0)

enter image description here

它对我有用。尝试在-uroot之间以及-ptestword之间没有任何空格的情况下执行命令。

答案 1 :(得分:0)

我也有同样的问题。这是因为我已将容器中的/var/lib/mysql复制到主机操作系统上的/var/lib/mysql

docker cp <container name>:/var/lib/mysql/ /var/lib/

要以正确的方式复制/ var / lib / mysql,您需要执行以下操作:

  1. 获取原始载入源
  2. docker inspect <container name> | grep -A7 Mounts | grep Source "Source":"/var/lib/docker/volumes/5a5fcb8c277c6a28f6eea2d156b5703cfc9feb86786ecf61caab95d803773647/_data",

    1. 停止容器
    2. docker stop <container name>

      1. 将数据从“来源”复制到/var/lib/mysql/
      2. mkdir /var/lib/mysql/

        cp -a /var/lib/docker/volumes/5a5fcb8c277c6a28f6eea2d156b5703cfc9feb86786ecf61caab95d803773647/_data/* /var/lib/mysql/

        完成此操作后,您将能够按预期使用dockerized mysql。

        所以,基本上问题在于mysql数据文件,而不是dockerezation。为了使它们处于一致状态,应在DB停止时复制它们。