Docker常见问题
1、容器内无法输入中文
当在Docker容器内输入中文或者复制中文内容时,有时会出现无法识别的情况。以下是解决方案:
- 进入容器时在命令中添加环境变量:
docker exec -it container_name env LANG=C.UTF-8 /bin/bash
- 在Dockerfile中使用ENV命令设置环境变量:
ENV LANG=C.UTF-8
这个命令应该在Dockerfile中执行,用于设置构建Docker镜像时的环境变量。
- 在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大小写敏感配置
按照官网的说法,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
不是默认的初始化数据库,有人为修改的痕迹。