Vin*_*ent 4 google-compute-engine docker google-container-os
我需要在容器上设置ulimits。例如,docker run --ulimit memlock="-1:-1" <image>。但是,我不确定在Compute Engine上部署容器优化的VM时如何执行此操作,因为它可以处理容器的启动。
我能够使用选项--privileged,-e用于环境变量,甚至是覆盖的CMD来部署VM。如何部署为容器设置了ulimits的VM?
我收到了官方答复:
不幸的是,Compute Engine上的容器功能当前不支持为容器设置ulimit选项。
一种解决方法是在容器内设置ulimit。例如:gcloud beta计算实例create-with-container INSTANCE --zone = ZONE --container-image = gcr.io / google-containers / busybox --container-privileged --container-command = sh --container-arg = -c-容器-arg = ulimit \ -n \ 100000
不幸的是,此方法要求以特权用户身份运行容器。
最好的祝福,...
此答复使我得到了启发,可以进行以下工作。创建从您的Docker映像的ENTRYPOINT引用的包装器脚本。在此包装脚本中,在启动受ulimit限制的进程之前,先设置ulimit。
作为一个简单的例子:
#! /bin/bash
# set memlock to unlimited
ulimit -l unlimited
# start the elasticsearch node
# (found this from the base images dockerfile on github)
/usr/local/bin/docker-entrypoint.sh eswrapper
Run Code Online (Sandbox Code Playgroud)
FROM docker.elastic.co/elasticsearch/elasticsearch:6.3.2
COPY wrapper.sh .
RUN chmod 777 wrapper.sh
ENTRYPOINT ./wrapper.sh
Run Code Online (Sandbox Code Playgroud)
docker image build -t gcr.io/{GCLOUD_PROJECT_ID}/example:0.0.0 $HOME/example
docker push gcr.io/{GCLOUD_PROJECT_ID}/example:0.0.0
gcloud beta compute instances create-with-container example-instance-1 \
--zone us-central1-a \
--container-image=gcr.io/{GCLOUD_PROJECT_ID}/example:0.0.0 \
--container-privileged \
--service-account={DEFAULT_COMPUTE_ENGINE_SERVICE_ACC_ID}-compute@developer.gserviceaccount.com \
--metadata=startup-script="echo 'vm.max_map_count=262144' > /etc/sysctl.conf; sysctl -p;"
Run Code Online (Sandbox Code Playgroud)
请注意以下几点。上面的启动脚本仅对于运行此映像的容器是必需的。该服务帐户是从您的私人Google容器注册表中提取所需的。--container-privileged参数是必不可少的,因为需要运行具有特权的容器才能在其中设置ulimit。
在vm HOST上,ps -e找到在包装脚本中执行的进程的PID。在这种情况下,找到命令为java的PID。对于每个PID ,cat /proc/{PID}/limits。在这种情况下,我仅将锁存器设置为无限。您可以看到它确实设置为无限制。
| 归档时间: |
|
| 查看次数: |
1071 次 |
| 最近记录: |