Dockerfileが正常にビルドされたときにいくつかのファイルを取得したいのですが、コンテナーからホストにファイルがコピーされません。
つまり、dockerfileをビルドしたとき、ファイルはすでにホストになっています。
ビルドするとき、ホストからビルドしているイメージにファイルをコピーする機会があります( COPY
ディレクティブ または ADD
)
container(docker run
'dされたイメージ)からホストに docker cp ((docker cp)==()を使用してファイルをコピーすることもできます。通常、cpはホストからコンテナにもコピーできます)
ただし、「Dockerfileから」コピーすることはできません。Dockerfileは、イメージの構築方法を指定する単なるレシピです。
ビルド中に生成された可能性のあるいくつかのファイルをホストに戻したい場合(たとえば、 スクリプトの呼び出し その sslを生成 )、コンテナーを実行できます、ホストからフォルダをマウントし、cpコマンドを実行します。
たとえば、これを参照してください getcrt script 。
docker run -u root --entrypoint=/bin/sh --rm -i -v ${HOME}/b2d/Apache:/Apache apache << COMMANDS
pwd
cp crt /Apache
cp key /Apache
echo Changing owner from \$(id -u):\$(id -g) to $(id -u):$(id -u)
chown -R $(id -u):$(id -u) /Apache/crt
chown -R $(id -u):$(id -u) /Apache/key
COMMANDS
COMMANDS
の間はすべて、コンテナで実行されるコマンドです。これには、ホスト${HOME}/b2d/Apache
フォルダにコピーされるcp
コマンドが含まれ、コンテナ内に/Apache
として-v ${HOME}/b2d/Apache:/Apache
としてマウントされます。
つまり、コンテナ内の/Apache
に何かをコピーするたびに、実際にはホスト上の${HOME}/b2d/Apache
にコピーしていることになります。
おそらく、ホストからフォルダーをボリュームとしてマウントし、そこにファイルを置くことができますか?通常、マウント時に読み取り専用オプションを指定しない限り、マウントされたボリュームはコンテナ内から書き込むことができます。
docker run -v ${PWD}:/<somewritablepath> -w <somewritablepath> <image> <action>
Dockerfile
機能を介して直接サポートされていませんが、ビルドされたDockerイメージからファイルをコピーできます。
containerId=$(docker create example:latest)
docker cp "$containerId":/source/path /destination/path
docker rm "$containerId"