如何使用 docker compose 使用 utf-8 设置 mysql?
Posted
技术标签:
【中文标题】如何使用 docker compose 使用 utf-8 设置 mysql?【英文标题】:How to setup mysql with utf-8 using docker compose? 【发布时间】: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?以及如何实现我的目标?
【问题讨论】:
【参考方案1】:当在docker-compose.yml
中使用command
时,它会覆盖默认的command
和entrypoint
,如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
以上是关于如何使用 docker compose 使用 utf-8 设置 mysql?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 docker-compose 在 docker 容器之间建立依赖关系 [重复]
如何使用 docker-compose 将容器部署到谷歌云?
如何使用来自其他目录的 docker-compose 环境变量