MySQL Docker容器不断重启

31

容器一直在重新启动。 我尝试了

  • docker-compose down -v
  • docker volume rm

该容器之前一直工作正常。

日志

2021-03-27 13:16:08+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started.

2021-03-27 13:16:08+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'

2021-03-27 13:16:08+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started.

2021-03-27 13:16:08+00:00 [ERROR] [Entrypoint]: MYSQL_USER="root", MYSQL_USER and MYSQL_PASSWORD are for configuring a regular user and cannot be used for the root user

Remove MYSQL_USER="root" and use one of the following to control the root user password:

- MYSQL_ROOT_PASSWORD

- MYSQL_ALLOW_EMPTY_PASSWORD

- MYSQL_RANDOM_ROOT_PASSWORD

Docker-compose.yml

 mysql:
    image: mysql:8.0
    ports:
      - 3306:3306
    expose:
      - "3306"
    cap_add:
      - SYS_NICE # CAP_SYS_NICE
    volumes:
      - ./cache/mysql:/var/lib/mysql
      - ./conf-mysql.cnf:/etc/mysql/conf.d/mysql.cnf
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_PASSWORD=root
      - MYSQL_USER=root
      - MYSQL_DATABASE=mydb
    restart: unless-stopped

4
请将 MYSQL_USER=root 更改为 MYSQL_ROOT_USER=root - Alex
我已经尝试过了,但没有成功。 - Shimron Duan
1
你的错误消息明显指向了MYSQL_PASSWORDMYSQL_USER,这些变量不应该被使用。 - Alex
5个回答

75

只需删除MYSQL_USER即可,因为root用户会自动创建。

注:这似乎是新版docker中的问题,因为以前可以正常工作而不会抛出错误。


但是如何为特定数据库创建一个独立的MySQL用户/密码? - Xin Meng

14

当mysql启动时,用户root是保留的并已经创建。

MYSQL_USER必须使用不同的名称,而不能使用root


谢谢,这确实让我在 Laravel Sail 中运行 _mysql_1,但是数据库中没有我的用户。.env 包含:DB_USERNAME=lti_laravel_user 和 docker-compose.yml: MYSQL_USER: '${DB_USERNAME}'。已经尝试过此建议:https://dev59.com/Kr_qa4cB1Zd3GeqPGV8S,但无济于事。有什么想法吗? - theotherdy
1
@theotherdy 首先,你可以运行“docker-compose config”来检查所有的环境变量是否正确地加载到了docker-compose中。 对于mysql中的用户,让我们尝试使用该用户名和密码连接到mysql数据库。 如有需要,请提出另一个问题。 - user15494648
感谢@user15494648,这确实显示:MYSQL_USER: lti_laravel_user,但是在使用HeidiSQL并连接root时,数据库中没有该名称的用户。最终我手动创建了该用户。虽然每次需要重建时都必须重新做这件事很麻烦,但了解出了什么问题会很好。 - theotherdy
这最终是我的问题。我的.env文件意外地设置为使用root用户,这是不好的。当Docker尝试构建镜像时,它试图创建我在.env文件中请求的数据库用户:root。MySql不喜欢那样并抛出错误。将数据库用户更改为合理的内容,一切都正常工作了。 - Tanoro

10
我遇到了完全相同的问题,以下是我如何解决它的方法。
请前往您的docker-compose.yml文件并进行以下更改:
- 将 "MYSQL_USER:root" 改为 "MYSQL_ROOT_USER:root",然后删除先前的内容。 - 将 "MYSQL_PASSWORD:YourPasseord" 更改为 "MYSQL_ROOT_PASSWORD:YourPasseord",然后删除先前的内容。
例如:以下是我的配置...
数据库服务器:
image: mysql:8.0
       container_name: mysql
       restart: always
       environment:
         MYSQL_DATABASE: DB_epraca
         MYSQL_ROOT_USER: root
         MYSQL_ROOT_PASSWORD: Password
         MYSQL_ROOT_HOST: localhost

非常感谢!!!这对我有用。而且它是真的...这与一些新版本的Docker有关。 - QauseenMZ
是的,它对我起作用了,非常感谢! - yousra yousef

5

最近官方的mysql docker发生了变化,导致了这个问题。更多细节请参见Github上的此PR

为了快速解决问题,您应该删除MYSQL_USER=root,并且您的docker-compose.yaml文件应该类似于这样:

mysql:
    image: mysql:8.0
    ports:
      - 3306:3306
    expose:
      - "3306"
    cap_add:
      - SYS_NICE # CAP_SYS_NICE
    volumes:
      - ./cache/mysql:/var/lib/mysql
      - ./conf-mysql.cnf:/etc/mysql/conf.d/mysql.cnf
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=mydb
    restart: unless-stopped

3

只更新您的 .env 文件:

DB_USERNAME=sail
DB_PASSWORD=password

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接