我有一个帮助程序外壳程序脚本,可以将大量文件(项目源代码)复制到apache容器(特别是var/www/html
目录中。(我不在整个项目中使用主机卷,因为它是一个巨大的空间(Magento 2)。
问题在于,docker cp
总是创建一个子目录,而不是将文件复制到该目录中。
脚本的相关部分如下:
SOURCE_DIR=/c/projects/foo/bar # actually pulled from .env file but this is what it comes out to
docker cp $SOURCE_DIR/. $(docker-compose ps -q apache_container|awk '{print $1}'):/var/www/html/
根据Docker文档:https://docs.docker.com/engine/reference/commandline/cp/,逻辑应为:
SRC_PATH specifies a directory
-检查:/c/projects/foo/bar
是目录
DEST_PATH exists and is a directory
检查:/var/www/html/
是容器中的目录
SRC_PATH does end with /. (that is: slash followed by dot)
检查:$SOURCE_DIR/.
= /c/projects/foo/bar/.
预期的行为:将foo / bar目录的内容复制到 var/www/html
容器中。
实际行为:在bar
中创建了目录var/www/html
,所以我最终有了var/www/html/bar
及其内容。
这是在Windows 10上使用Docker Desktop(不在WSL中运行)。
我还尝试了各种组合,例如docker cp $SOURCE_DIR/.*
,删除斜杠和点,对字符串的路径进行硬编码(而不是使用变量),在/var/www/html/
中删除结尾的斜杠,使用相对测试目录等路径。它总是将主机目录复制到容器目录,而不仅仅是主机目录内容。