Docker常见问题

1、容器内无法输入中文

当在Docker容器内输入中文或者复制中文内容时,有时会出现无法识别的情况。以下是解决方案:

  1. 进入容器时在命令中添加环境变量:
docker exec -it container_name env LANG=C.UTF-8 /bin/bash
  1. 在Dockerfile中使用ENV命令设置环境变量:
ENV LANG=C.UTF-8

这个命令应该在Dockerfile中执行,用于设置构建Docker镜像时的环境变量。

  1. 在Bash shell中,使用export命令设置环境变量:
export LANG=C.UTF-8

以上就是解决Docker容器内无法输入中文的常见方法。

2、docker安装Mysql8.0的坑之lower_case_table_names

在Docker安装好MySQL之后,程序出现了报错 Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'biz.XXL_JOB_QRTZ' doesn't exist 很显然,表名不存在,是因为表名是大写的问题。

MySQL大小写敏感配置

image.png
按照官网的说法,MySQL 8.0一旦你在初始化的时候没有给与相应的值,则默认 lower_case_table_names=0。后续如果你想要在my.cnf中修改此项,MySQL 8.0是不允许两者不一致的情况发生(MySQL 5.7的版本是可以的,所以MySQL 5.7的版本依然可以直接修改my.cnf)。所以事后修改这个配置是不允许的。

解决方案

重新启动MySQL,如果是第一次安装,那么Docker后面直接加--lower-case-table-names=1是可以的。如果不是第一次装,需要卸载掉原有的MySQL,-v /home/mysql/data:/var/lib/mysql 这里指定一个新的、干净的数据仓库。然后再--lower-case-table-names=1即可。
如果只是修改my.cnf,服务无法启动出现报错:

[ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('1') and data dictionary ('0').

显然,报错的提示,设置的lower_case_table_names=1与默认的字典值0不一致,接着就拒绝了我的设置。

Docker指定--lower-case-table-names=1(特定情况无效)

网上很多说法都是在Docker启动MySQL的时候配置--lower-case-table-names。但是我这边尝试了很多遍都无效,原因是因为我的MySQL初始化过了,/var/lib/mysql不是默认的初始化数据库,有人为修改的痕迹。

posted @ 2023-06-02 15:36  不想挨捶的牛  阅读(131)  评论(0编辑  收藏  举报