web-dev-qa-db-ja.com

Dockerfileを使用してホストからコンテナにファイルをコピーする方法

このようなDockerfileを作成しました

FROM ubuntu:12.04

RUN apt-get update
RUN apt-get install -y wget

これで、ホストマシンにabc.txtというファイルが作成されました。このコンテナにコピーする方法を教えてください。ホストからコンテナにコピーするDockerfileに追加できるステップはありますか?.

53
Sasikiran Vaddi

次のようなCOPYコマンドを使用します。

COPY foo.txt /data/foo.txt
# where foo.txt is the relative path on Host
# and /data/foo.txt is the absolute path in the image

cOPYの詳細を 公式ドキュメント で読む

代わりにADDを使用することもできますが、tar.gzファイルの解凍など、ADDの高度な機能を使用したくない場合、これはベストプラクティスではありません。ADDコマンドを使用する場合は、次のようにします。

ADD abc.txt /data/abc.txt
# where abc.txt is the relative path on Host
# and /data/abc.txt is the absolute path in the image

公式ドキュメント でADDの詳細を読む

73
george.yord

この(ひどく不明瞭な)エラーが発生した場合:

コピーに失敗しました:stat /var/lib/docker/tmp/docker-builderXXXXXXX/abc.txt:no such file or directory

次のような多くの理由が考えられます。

  • Docker-composeユーザーの場合、docker-compose.yml contextがDockerfileのコンテキストを上書きすることに注意してください。 COPYステートメントは、Dockerfileの相対パスではなく、docker-compose.ymlで定義されているパスをナビゲートする必要があります。
  • COPY行の末尾のコメントまたはセミコロン:COPY abc.txt /app #This won't work
  • ファイルは、.dockerignoreまたは.gitignoreファイルによって無視されるディレクトリにあります(ワイルドカードには注意してください)
  • タイプミスをした

WORKDIR /abcに続いてCOPY . xyz/が機能する場合は、COPY /abc xyz/が失敗する場合もありますが、少しいです。

12
Overleaf
2
user2915097

この問題に直面しましたが、zeppelin [1GB]ディレクトリをdockerコンテナにコピーできず、問題が発生していました

コピーに失敗しました:stat /var/lib/docker/tmp/docker-builder977188321/zeppelin-0.7.2-bin-all:そのようなファイルまたはディレクトリはありません

Dockerバージョン:17.09.0-ceを使用していますが、次の手順で問題を解決しました。

ステップ1:zeppelinディレクトリ[これをdockerパッケージにコピーしたい]を「Dockfile」を含むディレクトリにコピーします

ステップ2:Dockfileを編集し、コマンド[コピーする場所] ADD ./zeppelin-0.7.2-bin-all/usr/local /を追加します

ステップ3:DockFileを含むディレクトリに移動し、コマンドを実行します[代替も利用可能] docker build

手順4:ログで正常に作成されたドッカーイメージ

ステップ5/9:./zeppelin-0.7.2-bin-all/usr/local/---> 3691c902d9feを追加

ステップ6/9:WORKDIR $ ZEPPELIN_HOME ---> 3adacfb024d8 ....正常にビルドされたb67b9ea09f02

1
Rajeev Rathor