Dockerコンテナーで実行されている小さなFlaskアプリである私のサーバーに対して、いくつかの簡単なロギングを実行したいです。
ここにDockerfileがあります
# Dockerfile
FROM dreen/flask
MAINTAINER dreen
WORKDIR /srv
# Get source
RUN mkdir -p /srv
COPY perfektimprezy.tar.gz /srv/perfektimprezy.tar.gz
RUN tar x -f perfektimprezy.tar.gz
RUN rm perfektimprezy.tar.gz
# Run server
EXPOSE 80
CMD ["python", "index.py", "1>server.log", "2>server.log"]
最後の行でわかるように、私はstderrとstdoutをファイルにリダイレクトします。今、私はこのコンテナとシェルを実行します
docker run -d -p 80:80 perfektimprezy
docker exec -it "... id of container ..." bash
また、次の点に注意してください。
サーバーは稼働しており、ウェブサイトは機能しています
/srv/server.log
はありません
ps aux | grep python
の利回り:
root 1 1.6 3.2 54172 16240 ? Ss 13:43 0:00 python index.py 1>server.log 2>server.log
root 12 1.9 3.3 130388 16740 ? Sl 13:43 0:00 /usr/bin/python index.py 1>server.log 2>server.log
root 32 0.0 0.0 8860 388 ? R+ 13:43 0:00 grep --color=auto python
しかし、ログはありません...ただし、コンテナにdocker attach
すると、コンソールでアプリが出力を生成しているのがわかります。
Dockerを使用しているときにstdout/errを適切にファイルにリダイレクトするにはどうすればよいですか?
ユースケースについて質問したいのですが。 stderr/stdoutをコンテナー内のログファイルにリダイレクトする必要があるのはなぜですか?マージされたstderrとstdoutは、「docker logs」を使用してコンテナーの外部で利用でき、ファイル(コンテナーの外部)にリダイレクトできます。詳細については、 here を参照してください。
関連するユースケースに関する情報は次のとおりです:Docker Cloudで実行されているコンテナー内で出力をリダイレクトする必要があります
私の場合、Docker Cloudで長時間実行されるデータ分析スクリプト(Java)を実行しています。各コンテナは独自の結果ファイルを書き込むことになっています。私はJava:8-jre
画像を使用しており、次の行で「コマンドの実行」を上書きします。
bash -c "Java -jar /code/analyzer.jar > /data/results-$RANDOM.txt"
Bashの$RANDOM
変数を使用することで、結果を個別に収集しながら、Docker Cloudのコンテナー数を必要なだけ拡大できます。
シェルパイプラインまたはシェルリダイレクトでdocker run
を使用し、run
がstdinを受け入れ、stdoutおよびstderrに適切に出力するようにするには、次のように入力します。
docker run -i --log-driver=none -a stdin -a stdout -a stderr ...
例えば含まれている環境でAlpine
イメージを実行し、UNIXコマンドcat
を実行するには:
echo "This was piped into docker" |
docker run -i --log-driver=none -a stdin -a stdout -a stderr \
Alpine cat - |
xargs echo This is coming out of docker:
放出する:
This is coming out of docker: This was piped into docker
あなたはティーを探しています
LOGFILE="logthis.txt";
IMG_Alpine="Alpine:3.5";
docker run --rm \
--name Alpine-hello \
--hostname Alpine-hello \
"$IMG_Alpine" \
uname -a | tee -a $LOGFILE
cat logthis.txt
Linux Alpine-hello 4.8.14-docker-2 #1 SMP Tue Jan 10 15:35:02 UTC 2017 x86_64 Linux