2017-02-08 5 views
0

私はドッカー・イメージを構築するJenkinsサーバーを持っています(ドッカー・メイヴン・プラグインを使用しています)。jockkinsサーバーでのドッキング・ビルドのデバッグ

これらのビルドには通常約40秒かかります。しかし時々彼らは1.5時間かかる。

今、なぜ私は不思議に思っています。また、どのように状況をデバッグすることができますか? jenkinsコンソールのビルド出力は、mavenドッカービルド中にハングすることを伝えます。出力がハングする出力例:

[INFO] ------------------------------------------------------------------------ 
[INFO] Building MY Docker Image MY Image 0.5.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] >>> docker-maven-plugin:0.15.14:build (default-cli) > initialize @ docker-image-my-image >>> 
[INFO] 
[INFO] <<< docker-maven-plugin:0.15.14:build (default-cli) < initialize @ docker-image-my-image <<< 
[INFO] 
[INFO] --- docker-maven-plugin:0.15.14:build (default-cli) @ docker-image-my-image --- 
[INFO] Building tar: /usr/home/jenkinshome/workspace/JOB_NAME/source-repo/docker/image-my-image/docker-build.tar 
[INFO] DOCKER> docker-build.tar: Created [my-image] in 69 milliseconds 

これでハングします。

ドッカーが掛かっている操作を何とか見ることができますか?

UPDATE

ドッキングウィンドウのビルドを経由して直接起動するとき、ビルドはまた、ホストMASCHINEにハングアップします。 これはstraceのでこれを行うの出力の終わりです:

futex(0xc820028908, FUTEX_WAKE, 1)  = 1 
clock_gettime(CLOCK_REALTIME, {1486567620, 329675667}) = 0 
clock_gettime(CLOCK_REALTIME, {1486567620, 329756643}) = 0 
socket(PF_LOCAL, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3 
setsockopt(3, SOL_SOCKET, SO_BROADCAST, [1], 4) = 0 
connect(3, {sa_family=AF_LOCAL, sun_path="/var/run/docker.sock"}, 23) = 0 
clock_gettime(CLOCK_REALTIME, {1486567620, 330059768}) = 0 
epoll_create1(EPOLL_CLOEXEC)   = 4 
epoll_ctl(4, EPOLL_CTL_ADD, 3, {EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLET, {u32=3892185696, u64=139659048782432}}) = 0 
getsockname(3, {sa_family=AF_LOCAL, NULL}, [2]) = 0 
getpeername(3, {sa_family=AF_LOCAL, sun_path="/var/run/docker.sock"}, [23]) = 0 
futex(0xc820028908, FUTEX_WAKE, 1)  = 1 
read(3, 0xc820349000, 4096)    = -1 EAGAIN (Resource temporarily unavailable) 
write(3, "POST /v1.24/build?buildargs=%7B%"..., 349) = 349 
futex(0xc820028d08, FUTEX_WAKE, 1)  = 1 
write(3, "7ff\r\nockerfile\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 2054) = 2054 
ioctl(0, TIOCGWINSZ, {ws_row=57, ws_col=105, ws_xpixel=0, ws_ypixel=0}) = 0 
ioctl(0, TIOCGWINSZ, {ws_row=57, ws_col=105, ws_xpixel=0, ws_ypixel=0}) = 0 
) = 481, "Sending build context to Docker "..., 48Sending build context to Docker daemon 2.048 kB 
write(1, "\r\n", 2 
)      = 2 
write(3, "0\r\n\r\n", 5)    = 5 
futex(0xc820028d08, FUTEX_WAKE, 1)  = 1 
futex(0x12d3a48, FUTEX_WAIT, 0, NULLStep 1 : FROM jboss-db 
---> 74a0020a9922 
Step 2 : MAINTAINER *** 
---> Using cache 
---> 5d38cbd5501b 
Step 3 : USER root:root 
---> Running in 64b14554d8be 

そして、この時点でそれは

答えて

0

をハングアップしますが、ここではオプションの束を持って、あなたはどの1作品を感じることがありますあなたに最適。あなたは:

  • straceドッカーホスト上での処理を行うことができます。
  • ホストでsysdigのようなものを使用します。これは使いやすく、詳細です。
  • あなたのビルドがstdout/stderrに対してまだ生きていることと、docker log -f <build container>がビルドされているビルドか、jenkinsのスレーブ/マスタープロセスであるかどうかを確認するために、printfデバッグまたは何らかのログを出力します。

詳細なアドバイスでは、セットアップに関する詳細、ハングアップの意味、正確にハングアップしているコンポーネントが必要になるでしょう。

+0

説明を明確にするために質問を更新しました。どのプロセスに私はドッカーホスト上で "strace"する必要がありますか?ドッカー?それだけで何もしません。 – Nathan

+0

@Nathanいいえ、あなたは "コンテナ"プロセスを見つける必要があります。それはあなたのコンテナが現れ、それを歪めるプロセスです。 – ffledgling

+0

@Nathan、私はあなたの質問を誤解しているのを見ました。あなたの 'docker build'プロセスは何が掛かっているかのようです。そのためには、 'dockerd'と' docker-cli'をstraceする必要があります。ドッカーデーモンのログを見てください。ハングの一般的な原因は非常に大きなビルドコンテキストです。 – ffledgling

関連する問題