今天执行如下指令时遇到了报错:

1
2
3
4
5
6
➜  setup git:(master) ✗ docker cp ./data/ moegirl-db:/tmp/
Successfully copied 542MB to moegirl-db:/tmp/
➜ setup git:(master) ✗ docker exec -it moegirl-db ls /tmp/data
enmoegirl.sql wikidata.sql
➜ setup git:(master) ✗ docker exec -it moegirl-db mysql -u root -D wikidata < /tmp/data/wikidata.sql
zsh: no such file or directory: /tmp/data/wikidata.sql

我把文件复制到了容器内,文件也确实在容器内,但是执行导入指令时却报错找不到文件。

您猜怎么着?

这是因为 MySQL 官方镜像预设的 shell 是 zsh,zsh 中的 < 会被解析为重定向,妈的神金……

修复方法是明确使用 bash:

1
2
3
4
docker cp ./data/ moegirl-db:/tmp/
docker exec -it moegirl-db bash -c "mysql -u root -D enmoegirl < /tmp/data/enmoegirl.sql"
docker exec -it moegirl-db bash -c "mysql -u root -D wikidata < /tmp/data/wikidata.sql"
docker exec -it moegirl-db rm -rf /tmp/data

为什么会有官方镜像把 shell 配置成 zsh 的,啊米诺斯!