なぜ動作しないのか

なぜ動作しないのか

名前の末尾が変更されたディレクトリがあります。このディレクトリに含まれているファイルをコピーできるようにしたいです。たとえば、次のパスがあります(次にディレクトリ名が何であるかわかりません-。例は次のとおりですab)。

/tmp/folder-ab/file

このファイルをコピーしたいです。

これはdockerの外部で動作します。

cp /tmp/folder-*/file /other/path/ 

しかし、Dockerコンテナからコピーしたいので、次のことを試しました。

 docker cp $CONTAINERID:/tmp/[folder-]*/file /other/path/

次のエラーが発生します。

Error response from daemon: lstat
 /var/lib/docker/100000.100000/devicemapper/mnt/1ae07ffeda9e69465058ad01439543ab17a142d74668350b9185c1632cd7dec7/rootfs/tmp/folder-*/file:
 no such file or directory

答え1

なぜ動作しないのか

あなたのコードではdocker cp $CONTAINERID:/tmp/[folder-]*/file /other/pathglob()を使用しました*。 Globsはシェルによって拡張されますが、シェルはコンテナ内のファイルについては知りません。現在のシェル構成は、*通常の文字であるかのようにファイル名に保存されます。これでDockerは…/folder-*/…見つかりませんでした。

何をすべきか

テストされていません。テストしてみてください。

files="$(docker exec «container» bash -c "echo /folder-*/file")" #does not deal with spaces, etc.
do something with "$files"

または

docker exec «container» bash -c 'for f in *; do printf "%s\0" "$f"; done' | \
xargs -0 --no-run-if-empty cp -t "/other/path"

関連情報