2015-10-14 386 views
0

我试图启动一个通过以另一个用户身份运行多个命令来启动其进程的容器。这些命令使用su执行。我首先想到这是存储后端的一个问题,因为容器是在devicemapper上构建的,但是在aufs上运行,但是当我使用docker run时容器正确启动。我也认为这是容器有特权的问题,但我已经采取了在群集上运行特权容器所需的步骤,并且将privileged: true标志添加到了我的ReplicationController定义中。任何帮助表示赞赏。使用su时无法打开会话

库贝V1

泊坞1.7.0

Mesos 0.23.0

编辑:所以一些故障排除后,看来我的问题是,Kubernetes不正确的容器设置特权。即使我有--allow特权=真我的API服务器组,并从我ReplicationController下面的代码片段:

spec: 
    containers: 
    - name: oracledb 
     image: bradams/devops:oracle-test 
     privileged: true 

不知道还有什么我应该在这里做。

+0

有些事情可以帮助回答你的问题:如果直接在你的某个节点上使用docker启动,容器是否按预期运行?如果你用这个命令交互地启动一个Pod:kubectl run -i --tty - sh;那么你能够输入su命令并让它们工作吗? –

+0

第一点,我已经试过了,是的,它按预期工作。第二点,我会给出一个答案并报告回来。 – bradams

+0

所以第二个选项不起作用。环顾四周,我认为这可能是一个文件限制问题,但改变它并没有任何效果。我想也许Kubernetes没有正确地将容器设置为特权。在这一点上,我想不出任何其他答案。 – bradams

回答

2

正确的语法是:

spec: containers: - name: oracledb image: bradams/devops:oracle-test securityContext: privileged: true

你缺少securityContext:下筑巢。这在v1beta3和v1之间有所变化,这里记录:http://kubernetes.io/v1.0/docs/api.html#v1-conversion-tips-from-v1beta3

如果您尝试使用kubectl create --validate=true ...创建您的窗格,那么我认为这个问题会被捕获,并带有错误消息。

+0

感谢您的支持。我实际上刚刚发现我运行的是二进制文件的错误版本,因此在更新并找出语法之后,我能够移除这一点。现在的问题是,尽管我的apiserver应该允许特权容器,但当Mesos安排任务并在节点上启动kubelet时,它拒绝以_-- allow-privileged = true_开头。我可以在我的Mesos从站日志中看到它以标志false开始。 – bradams