我想在kubernetes中运行consul,但我不允许以root用户身份运行它。
因此我添加了
RUN addgroup consul root
到Dockerfile(派生FROM consul:1.0.3
)
并使用
在kubernetes中开始部署apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
xyz.service: consul-deployment
name: consul-deployment
spec:
template:
spec:
securityContext:
runAsUser: 100
现在我希望kubernetes能够与用户100
(当我在Docker本地启动它时曾经是用户consul
开始咨询,现在应该是组root
中的成员)
但是现在我在启动pod时会出现以下错误
chown: /consul/data: Operation not permitted
chown
在Consuls docker-entrypoint.sh
中执行,我猜它(仍然)失败,因为用户100
不是root用户。
当容器有一个期望以root身份执行的入口点脚本时,有人能解释我如何用非root用户启动容器吗?
答案 0 :(得分:2)
我最后修复了Consuls $(document).ready(function() {
$("#convert").click(function(){
var GardinerToUnicodeCodePoint = {
"A1" :"995328",
"A1A" :"995329",
"A1B" :"995330",
"A1C" :"995331",
"A2" :"995332",
"A2A" :"995333",
"A3" :"995334",
"A3A" :"995335",
"A3B" :"995336",
"A4" :"995337",
"A4A" :"995338",
"A4B" :"995339",
"A4C" :"995340",
"A4D" :"995341",
"A4E" :"995342",
"A5" :"995343",
"A5A" :"995344",
"A5B" :"995345",
"A5C" :"995346",
"A6" :"995347",
};
var userInput = $("#userInput").val; /*for example 'A1'*/
if (userInput in GardinerToUnicodeCodePoint) {
alert(/*value of key 'userInput' -> 995328*/);
} else {
alert("No code found!");
}
});
});
,在执行chown命令之前通过添加一些docker-entrypoint.sh
测试来检查用户是否是root用户。
答案 1 :(得分:0)
如果/ consul是nfs挂载,则可能是在服务器上设置了root_squash
和all_squash
。这将导致chown操作失败,因为新文件/文件夹将自动分配给nobody / nogroup。
如果您可以暂时更改共享以使用no_root_squash
和no_all_squash
,直到设置了所有文件,就可以了。由于该文件系统通常是持久性的,因此只需要一次,因此之后您可以将其重新设置为root_squash
和all_squash
。
答案 2 :(得分:0)
如果有人在寻找解决方案。 您也可以使用Bitnami的Consul图像。它们提供了流行应用的非根映像。
docker pull bitnami/consul:1.4.4