Help us understand the problem. What is going on with this article?

docker-compose で一向にビルドがはじまらない、もしくは起動しない。はたまた忘れたころに起動する。

docker-compose updocker-compose build しても building <サービス名> と出たまま先に進まない。ハングしているような感じで固まる。

TL;DR

大量のファイルがあるディレクトリがある場合、裏でそれらのファイルを Docker daemon が読み込んでいる可能性があります。

docker-compose を使わず、docker build -t test:local . と Docker でビルドしてみてください。

Sending build context to Docker daemon xxxMB と、xxxMB が永遠とカウントアップされるようであればビンゴと思われます。その場合は .dockerignore に、そのディレクトリを除外する設定をしましょう。

TS;DR

さっきまで docker-compose run --rm <name_service> で動いていた、機械学習の写経用コンテナが起動しなくなりました。「おかしいな」と、docker-compose build --no-cache とビルドしなおしても同じです。

起動しないと言うより止まったままの状態が続いたのです。

buildの場合
$ docker-compose build --no-cache
Building sample_service1 ← ここでハングってる
^CERROR: Aborting.

そこで、Ctrl+c で処理を止め、写経と言えば坊主ということで --verbose を呼んでみました。:bellhop: チリン

build時の詳細
$ docker-compose --verbose build --no-cache
compose.config.config.find: Using configuration files: ./docker-compose.yml
...省略...
compose.service.build: Building sample_service1
compose.cli.verbose_proxy.proxy_callable: docker build <- (path='~/Desktop/Sample', tag='samp
le:local', rm=True, forcerm=False, pull=False, nocache=True, dockerfile=None, cache_from=None
, labels=None, buildargs={}, network_mode=None, target=None, shmsize=None, extra_hosts=None,
 container_limits={'memory': None}, gzip=False, isolation=None, platform=None) ← ここで止まる

どうやら、上記 compose.cli.verbose_proxy.proxy_callable: docker build を呼び出した処理で止まったままです。

Docker がイメージを pull する際、たまにネットワークが重かったり pull 先が重い場合に反応が遅れることはあるのですが、体感的にいつも以上の時間がかかっています。

切り分け(やったこと):

  • docker-compose build --no-cacheNG(現象同じ)
  • docker-compose down からの docker-compose upNG(現象同じ)
  • docker-compose stop からの docker-compose upNG(現象同じ)
  • docker-compose psNG(起動中コンテナなし)
  • docker container prune -f docker image prune -f からの docker-compose build --no-cacheNG(現象同じ)
  • docker-compose logsNGAttaching to が出るだけ)
  • ホスト OS の再起動 → NG(現象同じ)
  • docker run --rm hello-world:latestOK(起動する)
  • docker-compose の "Hello World!"OK(起動する)

以上の切り分けにより、dockerdocker-compose 自体は生きているものの「現在の Dockerfiledocker-compose.yml に問題がありそう」と判断できそうです。

しかし、それらファイルはいじっていません。となると、別途マウントさせてるスクリプトなどに原因がありそうです。

そこで、docker-compose を通さず Docker から直接イメージをビルドしてみました。

$ docker build -t test:local .
Sending build context to Docker daemon xxxMB

すると、なんとなんと上記の xxxMB が永遠とカウントアップされていきます。何やら大量のファイルがコンテキストに送られているではありませんか!

「そうかっ!!学習用のデータ、かっ!!」

機会学習用に用意した大量のデータ・ボリューム(data ディレクトリ)をコンテナにマウントさせていたのですが、軽量のデータで動作確認したいと思い data2 とディレクトリ名をリネームしたのを失念していました。

.dockerignoredata2 を追加していつもどおり動くようになりましたとさ。とほほ

.dockerignore
data
data2

参考文献

KEINOS
A Japanese made in Mexico with Mexican quality ;-) Who monkey around the jungle of codes. 記事の日本語がおかしかったら遠慮なく編集リクください。また、記事に「LGTM」が付くたび、なるべく何かしら加筆・修正してブラッシュアップしています。基本的に変更通知はお送りしません。
https://blog.keinos.com/
qiitadon
Qiitadon(β)から生まれた Qiita ユーザー・コミュニティです。
https://qiitadon.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした