Redmineをdockerに構築後、使用中に引っ掛かった事について覚書。
構築時の記事
marusho1266.com
Redmineでユーザを作成しようとしたところ、以下のエラーが発生した。
色々調べた結果、ユーザ名に日本語を利用していることが原因のようだった。
日本語を使わないことは正直出来ないので、何とか対応する方向に。
結論としては、コンテナの設定を変えることで対応が出来そう。
以下対応内容。
- コンテナの停止
まずは念のためコンテナを停止する。
- docker-compose.ymlの修正
ymlの各serviceに以下の追記を行う。
# 以下の環境変数を追加 RAILS_ENV: production REDMINE_DB_ENCODING: utf8
# 以下の環境変数を追加 MYSQL_CHARACTER_SET_SERVER: utf8mb4 MYSQL_COLLATION_SERVER: utf8mb4_unicode_ci command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
Volumes
volumes redmine_plugins:
※yml全文は記事の最後に記載
- コンテナの再作成
ymlを修正した状態でコマンドプロンプトから以下を実行。
docker-compose up -d
これで上手くいくはずなのだが、日本語を含んで登録しても変わらずInternal errorが発生する。
以下のコマンドでコンテナを削除してから作成してもダメ。
docker rm [コンテナID]
色々とハマった結果、一番最初にコンテナを作成した時に、データ永続化を行っているので、コンテナを削除してもMySQLのデータは残っている状態になっている事が原因のよう。
このせいでymlを更新しても日本語の登録が出来ないと思われる。
※本来はデータが保持されている方が正しい。
完全に消すには、作成されたボリュームを指定して削除する必要があるので、以下のコマンドでボリュームを削除する。
docker volume rm [ボリューム名]
その前に、以下のコマンドで作成されているボリュームを確認
docker volume ls
こんな感じで3つのvolumeをすべて削除。
この状態で、再度コンテナを作成し、ユーザ登録をしてみる。
無事登録完了。
- 修正後のdocker-compose.yml全文
version: '3' services: redmine: image: redmine:latest ports: - "3000:3000" environment: REDMINE_DB_MYSQL: db REDMINE_DB_PASSWORD: password REDMINE_SECRET_KEY_BASE: supersecretkey # 以下の環境変数を追加 RAILS_ENV: production REDMINE_DB_ENCODING: utf8 depends_on: - db volumes: - redmine_files:/usr/src/redmine/files - redmine_plugins:/usr/src/redmine/plugins db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: redmine # 以下の環境変数を追加 MYSQL_CHARACTER_SET_SERVER: utf8mb4 MYSQL_COLLATION_SERVER: utf8mb4_unicode_ci command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci volumes: - mysql_data:/var/lib/mysql volumes: mysql_data: redmine_files: redmine_plugins: