从已经运行的docker容器中保存工件

时间:2017-10-18 13:34:49

标签: docker dockerfile

我对Docker来说是全新的。我用它来训练神经网络。

我有一个正在运行的容器,执行一个训练NN的脚本,并将其权重保存在容器的可写层中。最近我意识到这个设置不正确(我没有正确的RTFM),并且在训练结束后NN权重将会丢失。

我已阅读有关卷和持久数据存储的答案和食谱。所有这些都表达了一个想法:您必须提前准备数据存储。

我的容器已在运行。我明白不正确的设置是我的错。无论如何,我不想失去在执行过程中获得的结果(现在正在进行中)。可能吗?

我想到的一个解决方案是再打开一个终端并运行watch -n 1000 docker commit <image id> tag:label

即,每1000秒提交一次快照。但是,在上一个时期获得的权重仍处于危险之中,因为时期持续时间不同而且不是1000的倍数。

还有更优雅的解决方案吗?

其他信息

此容器的图像是使用以下Dockerfile创建的:

FROM tensorflow-py3-gpu-keras

WORKDIR /root

COPY model4.py /root
COPY data_generator.py /root
COPY hyper_parameters.py /root

CMD python model4.py 

我从DockerHub中提取的最新张量流图像中手动创建了图像tensorflow-py3-gpu-keras

docker run tensorflow

在容器内:

pip3 install keras

另一个终端docker commit

1 个答案:

答案 0 :(得分:4)

您是否尝试过使用docker cp?这允许您将文件从Docker文件系统移动到主机,即使容器已停止(只要它没有被删除)。语法如下所示:

docker cp <container id>:/path/to/file/in/container /path/to/file/in/host