単一のファイルをビルドコンテキストのルートから、Dockerイメージで新しく作成されたディレクトリにコピーしようとしています。
私が使用しているDockerfileは次のとおりです。
FROM debian:latest
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY test.txt /usr/src/app
Test.txtファイルは、次のような単純なASCIIテキストファイルです。
$ cat test.txt
This is a test
ただし、このイメージをビルドすると、宛先パスがディレクトリではないことを示すイメージが表示されます。
$ docker build .
Sending build context to Docker daemon 4.608 kB
Sending build context to Docker daemon
Step 0 : FROM debian:latest
---> 9a61b6b1315e
Step 1 : RUN mkdir -p /usr/src/app
---> Using cache
---> 86bd44a8776e
Step 2 : WORKDIR /usr/src/app
---> Using cache
---> ed6771adc681
Step 3 : ADD test.txt /usr/src/app
stat /var/lib/docker/devicemapper/mnt/ee5b9b7029f2adf27d332cbb0d98d6ad9927629a7569fd2d9574cb767b23547b/rootfs/usr/src/app/test.txt: not a directory
Dockerバージョン、ベースイメージ、およびdockerがインストールされたディストリビューションの複数の組み合わせを使用してみました。 COPYの代わりにADDを使用してみましたが、結果は同じです。
私は現在、CentOS 7で次のバージョンのdockerをインストールしてこれを試しています:
Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 786b29d
OS/Arch (client): linux/AMD64
Server version: 1.7.1
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 786b29d
OS/Arch (server): linux/AMD64
私が気づいたのは、ディレクトリはコピーできますが、ファイルはコピーできないということです。たとえば、ビルドコンテキストルートに「test」ディレクトリを作成し、test.txtをテストディレクトリ内に配置すると、ディレクトリを正常にコピーできます。
FROM debian:latest
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY test /usr/src/app
上記のDockerfileでは、。/ test.txtではなく./testディレクトリ全体をコピーします。このビルドは正常に完了しました。
Docker documentation には、COPY命令の次の使用例があります。これは、私がやろうとしていることに似ています。
COPY hom?.txt /mydir/
誰かが私が間違っていることを指摘できますか?単一のファイルをコピーするにはどうすればよいですか?
_
<src>
_が他の種類のファイルである場合、そのメタデータとともに個別にコピーされます。この場合、_<dest>
_が末尾のスラッシュ_/
_で終わる場合、それはディレクトリと見なされ、_<src>
_の内容は<dest>/base(<src>)
に書き込まれます。_
<dest>
_の末尾がスラッシュでない場合、通常のファイルと見なされ、_<src>
_の内容は_<dest>
_に書き込まれます。
したがって、末尾に_COPY test.txt /usr/src/app/
_を付けて_/
_を記述する必要があります。
私にとっては、Dockerfile
の代わりにdocker-compose.yml
に基づいてパスを追加していました。
ファイル構造
.
..
/docker-compose.yml
/docker/
/docker/php/
/docker/php/Dockerfile
/docker/php/my_file
/
でdocker-compose up --build
を実行していました。
COPY docker/php/my_file /some/location
の代わりにCOPY my_file /some/location
を実行する必要がありました