我正在尝试创建一个busybox docker镜像来保存我的rails应用程序的日志,包括nginx和unicorn日志。为了创建该容器,我使用以下命令:
docker run --name app-logs -v /logs busybox /bin/sh
但是,创建的容器会立即退出,代码为0:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
75e2f2efdc77 busybox "/bin/sh" 6 seconds ago Exited (0) 4 seconds ago app-logs
命令docker logs没有给出任何输出,我也找不到问题所在。
提前致谢。
答案 0 :(得分:3)
如果你想使用shell,你需要run docker in the foreground。
-t=false : Allocate a pseudo-tty
-i=false : Keep STDIN open even if not attached
所以
docker run -ti --name app-logs -v /logs busybox /bin/sh
如果要保留名为data volume container的内容,则需要至少有一个容器引用该卷。没有必要让它继续运行。退出的容器仍保存在您的系统上(docker ps -a
)。
docker run --name app-logs -v /logs busybox /bin/true
然后,您可以从应用容器装载数据容器卷
docker run -d --volumes-from app-logs --name app busybox ruby yourapp.rb
实现相同目标的另一种方法是使用主机通过在任何地方安装主机卷来存储数据
docker run --name app -v /logs:/logs busybox ruby yourapp.rb
我发现在docker存储有问题时,在docker之外的主机上存储数据是有益的。我可以将所有docker数据吹走,然后重新开始,轻松保存并重新安装我在主机上存储的所有有状态/应用数据。