36320


sameersbn/redmineを使用してDockerでRedmineを立ち上げようとしていますが、  
Redmine起動時にgem install(と思しき箇所)でエラーがでてしまい止まってしまいます。

[code]

    sudo docker pull sameersbn/redmine:3.3.1
    sudo docker pull sameersbn/mysql:latest
    mkdir -p /srv/docker/redmine/mysql
    mkdir -p /srv/docker/redmine/redmine
    
[/code]

にてイメージをpull後

[code]

    sudo docker run\
        --name=mysql-redmine -d \
        --env='DB_NAME=redmine_production'\
        --env='DB_USER=redmine' --env='DB_PASS=redpass'\
        -v /srv/docker/redmine/mysql:/var/lib/mysql sameersbn/mysql:latest
    sudo docker run\
       --name=redmine -d -p 12345:80\
       --env='REDMINE_PORT=12345'\
       --env='http_proxy=http://ユーザ名:パス@Proxyホスト:ポート'\
       --env='https_proxy=http://ユーザ名:パス@Proxyホスト:ポート'\
       --link=mysql-redmine:mysql\
       -v /srv/docker/redmine/redmine:/home/redmine/data sameersbn/redmine:3.3.1
    
[/code]

上記にてRedmineを立ち上げ後  
`sudo docker logs redmine`にて状況を確認

[code]

    Configuring redmine...
    Configuring redmine::database
    Configuring redmine::unicorn...
    Configuring redmine::secret_token...
    Generating a session token...
    Note:
      All old sessions will become invalid.
      Please specify the REDMINE_SECRET_TOKEN parameter for persistence.
      **SHOULD** be defined if you have a load-balancing Redmine cluster.
    Configuring redmine::max_concurrent_ajax_uploads...
    Configuring redmine::sudo_mode...
    Configuring redmine::autologin_cookie...
    Configuring redmine::backups...
    Configuring nginx...
    Configuring nginx::redmine...
    Installing plugins...
    Installing gems required by plugins...
    Could not fetch specs from https://rubygems.org/
    
[/code]

上記のログが出た後Redmineが停止してしまいます。  
環境はProxy環境内なのでそれが影響しているのでしょうか。  
Dockerは初めて触るもので調査方法自体余り把握できておりません。

立ち上げ環境:  
認証Proxyの設定が必要なネットワーク内  
Ubuntu16.04  
Docker version 17.06.0-ce, build 02c1d87

他に必要情報ありましたら、ご指摘ください。

* * *

**追記：**  
コンテナ内からProxyホスト名が認識できていないようで、Proxyホスト名を使用せずにProxyのIPアドレスを下記の様に指定することでRedmine起動可能となりました。

[code]

        sudo docker run\
       --name=redmine -d -p 12345:80\
       --env='REDMINE_PORT=12345'\
       --env='http_proxy=http://ユーザ名:パス@ProxyIPアドレス:ポート'\
       --env='https_proxy=http://ユーザ名:パス@ProxyIPアドレス:ポート'\
       --link=mysql-redmine:mysql\
       -v /srv/docker/redmine/redmine:/home/redmine/data 
    
[/code]

問題はdockerのコンテナ内部からホスト名の解決が出来ない点にあるようです。


CC BY-SA 3.0
2017-07-12T06:09:10.157
36290
2017-07-18T12:05:48.993
2017-07-18T11:35:57.057
23189
23189
question
docker rubygems redmine
Proxy環境においてDocker内からのgem installが失敗する"Could not fetch specs from https://rubygems.org/"


# コンテナのサーバーがなぜか動かない！ときの対処方法

基本的に、サーバー系 docker
イメージのエントリーポイント(最初に呼ばれるスクリプト)は、何も指定されなかたら、起動したいサーバーをスタートし、それ以外の普通のコマンドが与えられた場合には、そのコマンドを
exec 実行するだけ（サーバー起動スクリプトは実行しない）となっている場合が多いです。

今回問題となっているサーバーの entrypoint は <https://github.com/sameersbn/docker-
redmine/blob/master/entrypoint.sh> であり、このサーバーも上記慣習に従っていることがわかります。

特に、ちょうど今回のように、サーバー初期化に失敗した際に、サーバーのプロセス自体が死んでしまって、コンテナが終了してしまい、調査ができなくなってしまうような場合には、コンテナを作成しつつも、サーバーの初期化処理を回避することによって、何が起きているかの調査を行うことができます。

[code]

    sudo docker run\
        --name=mysql-redmine -d \
        --env='DB_NAME=redmine_production'\
        --env='DB_USER=redmine' --env='DB_PASS=redpass'\
        -v /srv/docker/redmine/mysql:/var/lib/mysql sameersbn/mysql:latest
    sudo docker run\
       --name=redmine -d -p 12345:80\
       --env='REDMINE_PORT=12345'\
       --link=mysql-redmine:mysql\
       -v /srv/docker/redmine/redmine:/home/redmine/data \
       sameersbn/redmine:3.3.1 \
       tail -f /dev/null
    
[/code]

上記のように、 `tail -f /dev/null` は、何もしないけどすぐに終了しないコマンドとして便利です。

作成された redmine コンテナの中に入るには、以下を実行します。

[code]

    sudo docker exec -it redmine bash
    
[/code]

今回問題になっている初期化スクリプトは、 entrypoint.sh のスクリプトによれば、

[code]

    /sbin/entrypoint.sh app:start # 何も指定しないときに走るサーバー初期化スクリプト
    
[/code]

によって、手動で実行し、どこが問題なのかの調査を行うことができます。

* * *

# 追記で報告された今回の原因

IP 直指定でプロキシを設定した場合には問題なく動作し、 wget で www.google.com に接続できない、ということから、コンテナ内部で利用する
DNS が接続できていないのだと考えられます。

[ask ubuntu での質問](https://askubuntu.com/questions/475764/docker-io-dns-doesnt-
work-its-trying-to-
use-8-8-8-8)や、[公式ドキュメント](https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-
dns-options)によると、 docker はコンテナ内部のドメイン解決に対して責任を持っている様子です。

下記の設定を行うことで、コンテナが利用する DNS を設定できます。

[code]

    # ホストOS /etc/docker/daemon.json (なければ作る)
    {
        "dns": ["社内dnsサーバーIP"],
        "dns-search": ["dns-searchのドメイン名1","dns-searchのドメイン名2",...],
        "dns-opts": ["それ以外のオプション1","それ以外のオプション2",...]
    }
    
[/code]

設定を行ったのちに、ホスト側で `sudo service docker restart` します。

正しく設定できたかの確認方法としては、`sudo service docker restart` が問題なく完了したのちに、コンテナの中の
`/etc/resolv.conf` の値が、意図した dns の設定になっているかでもってチェックができます。


CC BY-SA 3.0
2017-07-13T08:22:24.950
36320
2017-07-18T12:05:48.993
2017-07-18T12:05:48.993
754
754
36290
answer