【问题标题】:How to setup mysql with utf-8 using docker compose?如何使用 docker compose 使用 utf-8 设置 mysql?
【发布时间】:2018-02-10 18:41:53
【问题描述】:

我正在尝试让我的 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

当我运行它时,它会说

$ 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.

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

【问题讨论】:

    标签: mysql utf-8 docker-compose


    【解决方案1】:

    当在docker-compose.yml 中使用command 时,它会覆盖默认的commandentrypoint,如docker-compose documentation 中所述。为了实现您的目标,我建议您将my.cnf 挂载为卷,如“使用自定义 MySQL 配置文件”部分下的docker image's readme 中所述。

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

    ...
    volumes:
      - mycustom.cnf:/etc/mysql/conf.d/custom.cnf
    ...
    

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

    Edit-1

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

    mycustom.cnf

    [mysqld]
    character-set-server = utf8
    collation-server = utf8_unicode_ci
    skip-character-set-client-handshake
    

    【讨论】:

    • 添加了完成答案所需的配置
    • @Norbert Egger 还有一个“没有 cnf 文件的配置”部分,但我不确定这将如何应用于 docker-compose。也许对手动运行很方便
    • 谢谢,现在可以使用了!我已经清理了我的 docker(图像和容器),然后重建了所有东西并且它工作了。
    【解决方案2】:

    对于这个问题的新手,我可以通过从 command: mysqld ... 中删除 mysqld 来使其正常工作,如下所示:

      db:
        image: mysql
        command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8 --collation-server=utf8_general_ci
        restart: always
        environment:
    

    这与documentation for the official MySQL image 中的方式相同,在 ... 部分下通过 docker stack deploy 或 docker-compose


    作为旁注,您几乎从不想要在 MySQL 中进行utf8 编码;你需要utf8mb4。有关更多信息,请参阅此问答:What is the difference between utf8mb4 and utf8 charsets in MySQL?

    【讨论】:

    • 这可能是最快和最简单的解决方案。在我这边,我只需要 --character-set-server=utf8 --collation-server=utf8_general_ci 而没有 --default-authentication-plugin
    猜你喜欢
    • 2012-04-21
    • 2021-08-22
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 2017-08-20
    • 2021-07-02
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多