1. ホーム
  2. docker

[解決済み] dockerfileを使ったmkdirコマンドの操作方法

2022-03-12 03:27:53

質問

dockerfileを使用したコンテナで、mkdirコマンドでディレクトリを作成することができません。

私のDockerfileファイルは、単に;

FROM php:fpm

WORKDIR /var/www/html

VOLUME ./code:/var/www/html

RUN mkdir -p /var/www/html/foo

このようにして、簡単なphp: fpmコンテナを作成しました。 で、fooというディレクトリを作成するように書きました。

docker build -t phpx .

上記のコードでビルドしてみました。

私のdocker-composeファイルでは、以下のようになります。

version: '3'

services:
web:
container_name: phpx
build : .
ports:
- "80:80"
volumes:
- ./code:/var/www/html

の後に、以下のコードを実行すると、コンテナカーネルに入りました。

docker exec -it phpx /bin/bash

が、/ var / www / html に foo というディレクトリはありません。

どこが間違ってるんだろう。 助けていただけませんか?

解決方法は?

原因は、ホストからボリュームをマウントする際に /var/www/html . ステップ・バイ・ステップ

  1. RUN mkdir -p /var/www/html/foo は、コンテナのファイルシステム内に foo ディレクトリを作成します。
  2. docker-compose.yml ./code:/var/www/html の内容を非表示にします。 /var/www/html の内容の後ろにあるコンテナ・ファイルシステムで ./code をホストファイルシステム上で実行します。

そのため、実際にコンテナにexecitすると、その中身は ./code ディレクトリを見ると、ホスト上で /var/www/html .

修正しました。 docker-compose.ymlからボリュームを削除するか、あるいは foo -ディレクトリを作成し、コンテナを起動する。

追加備考 : Dockerfileの中で、ボリュームを次のように宣言しています。 VOLUME ./code:/var/www/html . これは機能しないので、削除した方が良いでしょう。Dockerfileでは、ホスト上のパスを指定することはできません。

引用元 ドッカー :

ホストディレクトリは、コンテナ実行時に宣言されます。ホストディレクトリ(マウントポイント)は、その性質上、ホスト依存となります。これは、画像の移植性を保つためです。なぜなら、与えられたホストディレクトリがすべてのホストで利用可能であることは保証できないからです。このため、Dockerfile 内からホストディレクトリをマウントすることはできません。 VOLUME 命令は host-dir パラメータの指定に対応していません。 . コンテナの作成時または実行時にマウントポイントを指定する必要があります。