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

时间:2016-03-15 11:08:03

标签: docker ipc

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

Docker版本1.9.1

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

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

通常在“AppStop”上,生成的进程被关闭,ipc资源(shm和msgq)被清除。但是在Docker容器中,不会进行清理。我们看到的错误如“msgctl中的UNIX errno 1”,“不允许操作”。虽然进程消失了,但ipcs仍然显示共享内存段和留下的msg队列。结果,同一容器中的后续“Appstart”无法启动新的进程集。方法是退出容器,停止并重新开始。

我们在Docker镜像中创建了一个新用户“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资源)就消失了。我可以在同一容器中停止并启动应用程序。

我无法理解为什么。

  • '--privilaged'有什么不同?
  • 使用此选项可能会产生任何意外的副作用吗?
  • 在文档中,还提到了一些功能'--cap-add',其值为'IPC_LOCK'和'IPC_OWNER'。我很好奇这些选项会做什么。

任何人都可以对此有更多的了解吗?感谢。

0 个答案:

没有答案