如何使用docker compose使用utf-8设置mysql?

Nor*_*ger 11 mysql utf-8 docker-compose

我试图让我的mysql图像运行utf-8编码.我的docker-compose文件看起来像:

version: '2'
services:
  db:
    container_name: zoho-grabber-db-development
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=topsecret
      - MYSQL_DATABASE=development
      - MYSQL_USER=devuser
      - MYSQL_PASSWORD=secure
    ports:
      - "3306:3306"
    command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci
Run Code Online (Sandbox Code Playgroud)

当我运行它,它说

$ docker-compose -f docker-compose.development.yml up
Removing zoho-grabber-db-development
Recreating 1b341fd7916e_1b341fd7916e_zoho-grabber-db-development

ERROR: for db  Cannot start service db: oci runtime error: container_linux.go:247: starting container process caused "exec: \"mysqld\": executable file not found in $PATH"
ERROR: Encountered errors while bringing up the project.
Run Code Online (Sandbox Code Playgroud)

为什么找不到mysqld?以及如何实现我的目标?

Fot*_*tis 19

在其中使用commanddocker-compose.yml会覆盖默认值,command并且entrypointdocker-compose文档中所述.为了实现您的目标,我建议您按照"使用自定义MySQL配置文件"部分my.cnf中的docker image自述文件中所述安装卷.

所以command从您的docker-compose中删除并添加volumes例如.

...
volumes:
  - mycustom.cnf:/etc/mysql/conf.d/custom.cnf
...
Run Code Online (Sandbox Code Playgroud)

并且容器将包括您的自定义配置作为服务器的配置

编辑-1

以下是您需要的自定义配置

mycustom.cnf

[mysqld]
character-set-server = utf8
collation-server = utf8_unicode_ci
skip-character-set-client-handshake
Run Code Online (Sandbox Code Playgroud)

  • 添加了还需要完成配置的配置 (2认同)

rat*_*ath 12

对于这个问题的新手,我基本上可以通过如下方式使其mysqld摆脱command: mysqld ...困境:

  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8 --collation-server=utf8_general_ci
    restart: always
    environment:
Run Code Online (Sandbox Code Playgroud)

与官方MySQL映像文档中通过docker stack deploy或docker-compose下的部分相同。


附带一提,您几乎从不希望utf8在MySQL中进行编码。你需要utf8mb4。有关更多信息,请参见此问答:MySQL中utf8mb4和utf8字符集有什么区别?