新しもの好きプログラマの耳より情報ブログ

仕事でもあるプログラミングについて役に立ちそうな情報を発信していこうというブログです。役に立たなそうな情報はfacebookで。

MySQLをDockerで使う時、Windowsだけで問題が起きた2点の解決方法

概要

apache guacamoleを試しにセットアップしてみたところ、LinuxのDockerでは上手くいったがDocker for Windowsでは2つ引っかかったところがあった。その内容をメモる。

.sqlファイルの文字コード

手順の中で、次のようにguacamoleからsqlファイルを出力して、それをMySQLへインポートするところがある。

docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > initdb.sql

これをdocker-entrypoint-initdb.dを利用してMySQLコンテナ立ち上げ時にインポートさせたところで、次のエラーが出た。

2021-12-29 02:20:23+00:00 [Note] [Entrypoint]: /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/initdb.sql
ERROR: ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expected. Query: '��-'.

調べたところ、MySQLが要求するのはUTF-8のファイルのようなのだが、WindowsPowerShell経由で出力したファイルはUTF-16LEになっていた。

ファイルの文字コードUTF-8に変換してからインポートさせることで、解決した。

.sqlファイルのアクセスエラー

続けて同じ手順で次のエラーが出た。

2021-12-29 05:23:57+00:00 [Note] [Entrypoint]: /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/initdb.sql
mbind: Operation not permitted

とりあえず実験用として早く動かす必要があったので、次のサイトの情報をそのままパクらせてもらった。

bmf-tech - DockerのOperation not permittedというエラー に対応する

具体的には、docker-compose.ymlのうちMySQLのコンテナを定義する部分に、次の記載を追加した。

    security_opt:
      - seccomp:unconfined

結果

以上2つの処置をしたところで、LinuxのDockerと同様に無事apache guacamoleを起動することができた。