【问题标题】:can't connect to mysql docker when mount a directory挂载目录时无法连接到mysql docker
【发布时间】:2015-10-21 11:56:04
【问题描述】:

我使用官方 mysql 5.5 docker 作为数据库容器。 第一个拉容器:

docker pull mysql:5.5

然后我运行:

docker run --name mysqldb -e MYSQL_ROOT_PASSWORD=testword mysql:5.5

运行成功,ip为172.17.0.20的容器mysqldb。我可以通过这个访问这个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。不知道为什么。

【问题讨论】:

    标签: mysql docker dockerhub


    【解决方案1】:

    它对我有用。在-uroot 之间以及-ptestword 之间尝试您的命令。

    【讨论】:

      【解决方案2】:

      我也有同样的问题。这是因为我已将/var/lib/mysqlcontainer 复制到 host OS 上的/var/lib/mysql,方法是:

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

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

      1. 获取原始挂载源

      docker inspect <container name> | grep -A7 Mounts | grep Source "Source":"/var/lib/docker/volumes/5a5fcb8c277c6a28f6eea2d156b5703cfc9feb86786ecf61caab95d803773647/_data",

      1. 停止容器

      docker stop &lt;container name&gt;

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

      mkdir /var/lib/mysql/

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-08
        • 1970-01-01
        • 2018-10-02
        • 2018-09-07
        • 2016-11-10
        • 2022-10-20
        • 2020-02-12
        相关资源
        最近更新 更多