docker文件系统使用分层复制fs进行写时复制。因此,当您写入图像的一部分时,它将首先将该文件复制到容器文件系统,该文件系统位于所有图像层之上。
这意味着当您在/var/log/cron.log中添加一行时,它将在文件系统中获得一个新的inode,并且该
tail命令所遵循的文件不再是您
dockerexec进入容器时看到的文件。您可以通过较小的更改来解决该问题,将“ nothing”附加到文件中,这还会修改最后的更新时间戳,从而强制执行写时复制:
CMD echo "starting" && echo "continuing" && (cron) && echo "tailing..." && : >> /var/log/cron.log && tail -f /var/log/cron.log
我整理了一个要点,来解决这个问题,这里有更多详细信息:https : //gist.github.com/sudo-
bmitch/f91a943174d6aff5a57904485670a9eb



