Docker,ipc资源和'–privilaged'选项

Docker,ipc资源和'–privilaged'选项。 需要解释。

Docker版本1.9.1

我们正在尝试使用Docker来validation我们公司的应用程序,但是面临一个问题。

应用程序在启动时会设置共享内存和垃圾队列的大块,然后生成其他几个共享它们的进程。

通常在'AppStop'上,产生的进程被closures,ipc资源(shm和msgq)被清除。 然而在Docker容器中,清理并没有发生。 我们看到“msgctl的UNIX errno 1”,“操作不允许”等错误。 虽然进程消失,但ipcs仍然显示共享内存段和留下的msg队列。 因此,在同一个容器中的后续“Appstart”无法启动新的一组进程。 解决方法是退出容器,停止并重新启动。

我们在Docker镜像中创build了一个新的用户“appuser”,应用程序以该用户身份运行。 启动和清理二进制文件设置了setuid位,以便以root用户身份运行。 Docker命令行是

docker run -d -u appuser -w /home/appuser/node -e TERM=vt100 -p 9876:6666 --name "demo" <IMAGE_ID> bash -c '. ./setup; Appstart $APPSYS; tail -f $APPSYS/Appmain.log' 

在向上述命令添加“–privilaged”选项之后,(留下的ipc资源的)问题消失。 我可以停止并在同一个容器中启动应用程序。

我无法理解为什么。

  • “ – 优惠”有什么不同?
  • 使用这个选项会有什么意想不到的副作用吗?
  • 在文档中,还提到了“cap-add”的function,如“IPC_LOCK”和“IPC_OWNER”。 我很好奇这些选项会做什么。

任何人都可以更多地指出这一点吗? 谢谢。