🦆

dockerビルド時のフォルダ指定

2024/09/29に公開

dockerでもdocker composeでも
基本、コマンド実行フォルダ配下のDockerfileが呼ばれますが
かならずしもそういうフォルダ構成でないといけないわけではないという
備忘録です。

ビルドする

対象となる、コンテキスト(context)とファイル(dockerfile)を指定することができます。

# docker build <コンテキスト指定> -f <ファイルパス>
docker build . -f ./setup/develop.dockerfile

contextはdocker buildコマンドを入力する際、必須です。
.(ドット)はコマンドプロンプトで指定しているフォルダ直下をさします。

docker composeを利用する場合

contextで指定したパスが親ディレクトリになります。

compose.yaml
services:
  app:
    build:
      context: .
      dockerfile: ./setup/develop.dockerfile
    restart: unless-stopped

ビルドする

docker compose build

ビルドとコンテナ起動まで実行(バックグラウンドで起動 = デタッチモード-d)
※ すでにイメージが存在する場合はビルドは行わず、コンテナ起動のみ

docker compose up -d

compose実行時の凡ミス

compose.yamlがあるフォルダ直下でコマンドは実行する

コマンド自体実行できるが、エラーメッセージなど表示されないので気をつける

root@dummy:~/test/sandbox$ docker compose build
root@dummy:~/test/sandbox$ 

参照ファイルが存在するフォルダを指定する

指定していなかった場合、以下のようなエラーメッセージが表示されます。

root@dummy:~/test/sandbox/hoge$ docker compose build
[+] Building 1.0s (7/7) FINISHED                                                                                            
 => [internal] load build definition from Dockerfile                                                                   0.5s
 => => transferring dockerfile: 420B                                                                                   0.0s
 => [internal] load .dockerignore                                                                                      0.6s
 => => transferring context: 2B                                                                                        0.0s
 => [internal] load metadata for docker.io/library/alpine:latest                                                       0.0s
 => [1/3] FROM docker.io/library/alpine:latest                                                                         0.2s
 => [internal] load build context                                                                                      0.3s
 => => transferring context: 2B                                                                                        0.0s
 => ERROR [2/3] ADD ./hoge/fuga2.txt /sandbox/fuga2.txt                                                                0.0s
 => ERROR [3/3] ADD ./hoge /sandbox                                                                                    0.0s
------
 > [2/3] ADD ./hoge/fuga2.txt /sandbox/fuga2.txt:
------
------
 > [3/3] ADD ./hoge /sandbox:
------
failed to solve: failed to compute cache key: failed to walk /var/lib/docker/tmp/buildkit-mount2970273137/hoge: lstat /var/lib/docker/tmp/buildkit-mount2970273137/hoge: no such file or directory

dockerfile名を正しく書く(ファイルパスが正しいか)

存在しないdockerfile(拡張子に.dockerfileをつけたファイル)を指定した場合は以下のようなエラーメッセージが表示されます。

root@dummy~/test/sandbox/hoge$ docker compose build
[+] Building 0.0s (0/0)                                                                                                     
could not find /home/root/test/sandbox/hoge/hoge: stat /home/root/test/sandbox/hoge/hoge: no such file or directory

指定したフォルダ先にDockerfile(拡張子なしのDockerfile)がない場合は以下のようなエラーメッセージが表示されます。

root@dummy:~/test/sandbox/hoge$ docker compose build
[+] Building 0.2s (2/2) FINISHED                                                                                            
 => [internal] load build definition from Dockerfile                                                                   0.1s
 => => transferring dockerfile: 2B                                                                                     0.0s
 => [internal] load .dockerignore                                                                                      0.1s
 => => transferring context: 2B                                                                                        0.0s
failed to solve: rpc error: code = Unknown desc = failed to solve with frontend dockerfile.v0: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount4160731069/Dockerfile: no such file or directory

Discussion