docker run -d -p

オライリーの Docker を読んでて、ハマったので。

ハマったところは、6章あたりの cmd.sh を使って、実行するところ。
そもそもここは、スペースが一つ足りないコードが書いてある。

環境:debian

docker run -d -p 5000:5000 -e "ENV=DEV" --link dnmonster:dnmonster identidock

をやって、エラーが出ずにうまくいかない。(実際、この前の部分でcmd.shが間違えていて、放置していた)
Dockerfile 内の cmd.sh が間違えていた。
上のコマンドから -d をのけて実行すると、わかった。
どうやら、デーモンにしたことで標準出力も外に出てなかったみたい。
原因は python のコマンドが定まってなかったらしい。
python3 に書き直すと上手く行った。
というわけで、上手くいったものを下記する。

こんな感じ

#!/bin/bash
set -e

if [ "$ENV" = 'DEV' ]; then
  echo "Running Development Server"
  exec python3 "identidock.py"
else
  echo "Running Production Server"
  exec uwsgi --http 0.0.0.0:9090 --wsgi-file /app/identidock.py \
             --callable app --stats 0.0.0.0:9191
fi