Docker未设置MariaDB密码

时间:2020-05-22 07:45:54

标签: docker mariadb

在我的docker-compose.yml

version: '3'
services:
  db:
    image: mariadb:latest
    volumes:
      - ./dc_test_db:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: secret

当我通过以下方式连接时:

sudo docker exec -it docker_db_1 mysql -u root -p 

我必须让密码为空才能登录。怎么了?

5 个答案:

答案 0 :(得分:1)

这是因为您是从容器本身内部在本地使用客户端。本地连接不要求输入密码。

尝试从您的主机连接到docker containerip:3306,然后它将要求输入密码

答案 1 :(得分:1)

MySQL用户由请求来自的用户名和主机定义。例如,有三个不同用户 root@192.168.0.123root@localhost和通配符root@%

如果您在docker-compose文件中设置了MYSQL_ROOT_PASSWORD env,则mariadb将为用户root@%设置密码,而不是为用户root@localhost设置密码。

但是,当您尝试测试mariadb的密码时,请使用sudo docker exec -it docker_db_1 mysql -u root -p命令,这意味着容器中的mariadb-client将使用用户root@local(无密码)访问mariadb-server,而不是用户{ {1}}(具有您之前设置的密码)。

因此,如果要测试为该用户设置的密码,请使用该命令:

root@%

MARIADB-CONTAINER-IP是您的mariadb容器的IP地址(使用docker inspect检查容器的IP地址)。 谢谢。

答案 2 :(得分:1)

您似乎是从现有的 db 数据目录启动 mariadb 容器,这将导致使用当前数据库而不是初始化新数据库。所以为了解决这个问题,我建议删除任何现有的 mariadb 容器,删除当前的 db 目录内容,再次运行 docker compose:

$ docker-compose down -v
$ rm -Rf db/*
$ docker-compose up -d

答案 3 :(得分:0)

MYSQL_ROOT_PASSWORD仅在第一次运行具有给定体积的容器时设置。

要使用MYSQL_ROOT_PASSWORD设置密码,请执行以下操作:

选项1 :删除旧的数据库文件并重新开始。

rm -rf ./dc_test_db

选项2 :使用命名卷:

version: '3.5'
services:
 db:
  image: mariadb:latest
  volumes:
    - dc_test_db:/var/lib/mysql
  restart: always
  environment:
    MYSQL_ROOT_PASSWORD: secret
volumes:
  dc_test_db:

答案 4 :(得分:0)

我在mariadb的10.4版中遇到了这个问题,该问题已通过更改为10.3版得以解决。 但是,这个问题可能还有另一个原因。

在Docker体系结构中,应注意的是,在首次构建后图像是不可变的。也就是说,通过更改docker compose文件中定义的局部变量并重新运行服务或重新启动服务,构建映像的初始设置不会发生变化。要应用这些更改,必须再次执行构建映像和容器以及运行服务的步骤。可以按照以下步骤进行。

1.docker-compose stop(首先,我们停止服务)

2.Docker-compose rm(然后我们清理所有相关的容器)

3.Docker组成--build -d(最后使用--build选项运行该服务,以使用新定义的设置重建映像。)

请注意,执行这些步骤将删除容器中存储的所有数据。