Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker、ipc资源和'--私有的';选项 Docker、ipc资源和“--privileged”选项。需要解释。_Docker_Ipc - Fatal编程技术网

Docker、ipc资源和'--私有的';选项 Docker、ipc资源和“--privileged”选项。需要解释。

Docker、ipc资源和'--私有的';选项 Docker、ipc资源和“--privileged”选项。需要解释。,docker,ipc,Docker,Ipc,Docker版本1.9.1 我们正试图通过Docker对我们公司的应用程序进行验证,但面临一个问题 应用程序在启动时设置共享内存块和消息队列,然后生成几个共享它们的其他进程 通常在“AppStop”上,生成的进程被关闭,ipc资源(shm和msgq)被清理。但是,在Docker容器中,不会进行清理。我们看到了诸如“来自msgctl的UNIX错误1”、“不允许操作”之类的错误。尽管进程消失了,IPC仍然显示了留下的共享内存段和消息队列。因此,同一容器中的后续“Appstart”无法启动新的进程集。

Docker版本1.9.1

我们正试图通过Docker对我们公司的应用程序进行验证,但面临一个问题

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

通常在“AppStop”上,生成的进程被关闭,ipc资源(shm和msgq)被清理。但是,在Docker容器中,不会进行清理。我们看到了诸如“来自msgctl的UNIX错误1”、“不允许操作”之类的错误。尽管进程消失了,IPC仍然显示了留下的共享内存段和消息队列。因此,同一容器中的后续“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'
docker run-d-u appuser-w/home/appuser/node-e TERM=vt100-p9876:6666——名称“demo”bash-c'/设置;Appstart$APPSYS;tail-f$APPSYS/Appmain.log'
在上面的命令中添加“--privilaged”选项后,问题(留下的ipc资源)就消失了。我可以在同一容器中停止和启动应用程序

我不明白为什么

  • “--privileged”有什么区别
  • 使用此选项是否会产生任何意外的副作用
  • 在文档中,还提到了功能“--cap add”,其值为“IPC_LOCK”和“IPC_OWNER”。我很好奇这些选项会起什么作用
有谁能解释得更清楚些吗?谢谢