Translate

2017年6月9日金曜日

Official なredmineイメージをdocker-composeしたらデフォルト設定ロード時にエラーになる


Docker HubにRedmineのofficialイメージがある。
これを使ってDocker CE(17.03)上でコンテナをあげようとしたのだけど、うまく行かなかった。


Official Repository redmine
https://hub.docker.com/_/redmine/

ここのREADME.md上にdocker-compose.yml

version: '2'

services:

  redmine:
    image: redmine
    ports:
      - 8080:3000
    environment:
      REDMINE_DB_MYSQL: db
      REDMINE_DB_PASSWORD: example
    depends_on:
      - db
    restart: always

  db:
    image: mariadb
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: redmine
    restart: always

と書かれているので、既にjenkins(tomcat)で使ってる
8080のところを3000にして動かそうとしたら..

redmine コンテナがやたらRestartを繰り返すのだ。


で、docker-compose logs redmine したら
gem失敗していることに気づく。

どうも、proxyが引けないらしい..

ということでdocker-compose.yml上の environment: に
環境変数 HTTP_PROXY (と念のため HTTPS_PROXY)をセットした。

で、開こうとしたら..
http://redmine.. :3000/ から admin/admin でログインはできたのだけど、
管理画面の先頭に最初だけ出てくる日本語環境の「デフォルト設定のロード」ボタン
押すと

デフォルト設定がロードできませんでした: Mysql2::Error: Incorrect string value: '\xE7\xAE\xA1\xE7\x90\x86...'

なるメッセージが出てしまう..

これ..MySQL..じゃなく mariadb の文字コード設定の問題がでているらしい。

mariadbイメージ..official docker hubサイトを調べてみた。

Official Repository mariadb
https://hub.docker.com/_/mariadb/


残念ながら良さげな環境変数はなかった。
environmentを1行加えるだけという訳にはいかないらしい..

だが、ホスト側のcnfファイルを追加で読んでくれるconf.dexposeされているので
これを使った。

最終型のdocker-compose.ymlは大体以下のような感じ。

version: '2'

services:

  redmine:
    image: redmine:latest
    restart: unless-stopped
    volumes:
      - ./data/redmine:/usr/src/redmine/files
    ports:
      - 3001:3000
    environment:
      - REDMINE_DB_MYSQL=mariadb
      - REDMINE_DB_PASSWORD=example
      - HTTP_PROXY=http://your.proxy.server:8080
      - HTTPS_PROXY=http://your.proxy.server:8080
    depends_on:
      - mariadb

  mariadb:
    image: mariadb:latest
    restart: unless-stopped
    volumes:
      - ./data/mariadb/conf:/etc/mysql/conf.d
      - ./data/mariadb/data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=example
      - MYSQL_DATABASE=redmine

イメージのタグ、latest だと運用上マズイので、
本番ではキチンとバージョンを指定してやるようにしてください。

最初に docker-compose up する前に用意した
./data/mariadb/conf/server.cnf はホスト側のmariadbの本物(/etc/my.cnf.d/server.cnf)をつかったが、
たぶん

[mysqld]
character-set-server=utf8

だけでも大丈夫だとは思う。試してないけど...


運用上restartalwaysより最後のdocker-compose stopが効くコッチがよかろうということで
unless-stoppedに変更している。

あとバックアップをdocker-compose stopして ./data
まるっとコピーするので、exposeされたvolumeは全部使った。

SELINUX=enforcing のままredmineを導入する場合は
念のため chcon -Rt svirt_sandbox_file_t ./data しておいたほうがいいだろう。



にしても..

ひさしぶりにdocker-compose使ったが..
相当手が入っているなあ..

裏でネットワーク用コンテナ上がるようになっていて
bridgeだのhostだのnullだの選択できるようになってる..

docker-compose.ymlファイルごとにIPアドレスが172.17.0.2やら172.20.0.2やら
ちょっとづつ変わる。

コンテナ側のリゾルバはみな127.0.0.11をさしていて
どうもこれがホスト側のDNSリソルバ設定につながっているらしい..

なのでホスト側IPアドレスのエイリアスアドレスなのかと
内部からホスト側を呼ぶときにコレを使おうとしたら
うまく行かなかった...

ホスト側のFQDNをキチンとDNSで登録するかhostを使えということらしい..

裏技として..かならず作成されるデフォルトbridgeのゲートウェイIP
172.17.0.1 をホスト側のIPとしてつかうことはできる..けど美しくない!


ホストサーバをFreeIPAとかでたてていて
DESSEC設定変えたくないばっかりに
FreeIPAにはフォワーダ指定なしにして
ホスト側のリゾルバにフォワーダだけ登録して抜けていたが
このせいでホスト側のDNSサーバのforwarderをセットしなくちゃならない羽目にあった..


Dockerは、ますます重くなっていくのだろうか...

これじゃVMwareやVirtualBoxとかわらなくなってきちまうよ..


0 件のコメント:

既存アプリケーションをK8s上でコンテナ化して動かす場合の設計注意事項メモ

既存アプリをK8sなどのコンテナにして動かすには、どこを注意すればいいか..ちょっと調べたときの注意事項をメモにした。   1. The Twelve Factors (日本語訳からの転記) コードベース   バージョン管理されている1つのコードベースと複数のデプロイ 依存関係 ...