我想在docker中运行一些测试,因此加载我的更新代码到现有容器中以节省每次重建镜像的时间。
docker cp似乎是解决这个问题的理想方案-但它似乎不能覆盖我的现有文件,这是我进行的简短测试。我在本地创建了一个新文件,将其复制到容器中,在本地更改文件后,再次复制它,并比较更改之前和之后容器内文件的内容。
正如我们所看到的,更改并没有被复制。当复制整个文件夹时(这实际上是我计划要做的事情),同样的情况也发生了。Docker Docs中提到:
容器的Docker镜像基于
非常感谢您的帮助。
docker cp似乎是解决这个问题的理想方案-但它似乎不能覆盖我的现有文件,这是我进行的简短测试。我在本地创建了一个新文件,将其复制到容器中,在本地更改文件后,再次复制它,并比较更改之前和之后容器内文件的内容。
>> touch test123
>> docker cp test123 my-container:/
>> docker exec my-container cat /test123
(empty)
>> vi test123
(add some text on my local machine)
>> docker cp test123 my-container:/
>> docker exec my-container cat /test123
(empty)
>> vi test123
(check if the content was saved –> yes)
正如我们所看到的,更改并没有被复制。当复制整个文件夹时(这实际上是我计划要做的事情),同样的情况也发生了。Docker Docs中提到:
DEST_PATH存在且是一个文件,则目标将被源文件内容覆盖
,所以我想知道我在这里做错了什么。容器的Docker镜像基于
ubuntu:16.04
。非常感谢您的帮助。
docker cp
命令会按照预期覆盖文件。你的第二个 exec 命令前面缺少docker
,这可能是问题所在。不管怎样,最好将主机目录挂载到容器中,而不是在每次本地开发时复制文件。 - Sven Koschnickedocker
命令并没有丢失,那是我在复制到 SO 时犯的错误。如果您无法重现,可能是版本问题(我的 Mac 版本是17.12.0-ce
)?我将尝试挂载它,但这不会很好地融入开发流程中。 - Deproblemify