我在创建 docker 服务时遇到“退出状态 34”。请指出问题所在。
Docker 版本:Docker 版本 17.09.1-ce,构建 19e2cf6 错误日志:nsenter:无法取消共享命名空间:无法分配内存 container_linux.go:265:启动容器进程导致“process_linux.go:270:运行 exec setns 进程以进行 init 导致 \“退出状态 34 \”” 错误:服务“web”无法构建:oci 运行时错误:container_linux.go:265:启动容器进程导致“process_linux.go:270:运行 exec setns 进程以进行 init 导致 \“退出状态 34 \””
答案1
我们看到了类似的错误。“nsenter:无法取消共享命名空间:无法分配内存”。
根据我的经验,这与内存直接相关,在我们的例子中与交换有关。我们将交换空间设置得相当低,但我们的 Red Hat OS 仍在使用它。我们发现两个似乎有帮助的操作。
增加主机上的 RAM,以提供足够的开销,从而阻止 RHEL 使用交换。如果您有能力添加 RAM,这不是一个坏选择。
我们遵循了此文档,这很有帮助。但是,您需要做一些分析来确定这是否适合您。一旦您进行了此更改,您将使用更多活动 RAM。例如,我们有一个使用 4GB RAM 和 2GB 交换的 Angular 构建。进行此更改后,所有 6GB 都在 RAM 中。因此,如果您选择这种方法,您需要小心,不要最终用完所有 RAM 并迫使操作系统使用交换来完成关键工作。
https://success.docker.com/article/node-using-swap-memory-instead-of-host-memory
答案2
我也遇到了这个问题。
以下是我发现的内容:
- 可能是主机内存不足(不是我的情况)
- 如果你在同一主机上打开超过 1023 个容器,则可能会发生这种情况
可能是内核错误(v <3.10.x)在补丁中修复,因此升级内核应该可以修复它:
https://github.com/opencontainers/runc/issues/1513
可能是 RHEL 上的配置问题:https://success.docker.com/article/user-namespace-runtime-error
$ grubby --args="namespace.unpriv_enable=1 user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)" $ echo "user.max_user_namespaces=15000" >> /etc/sysctl.conf $ reboot
可能是用户命名空间未启用:https://github.com/moby/moby/issues/34011
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-
核心)”此脚本可以帮助识别主机上的配置差距:https://raw.githubusercontent.com/moby/moby/master/contrib/check-config.sh
- 要了解有关使用用户命名空间的 docker 的更多信息:https://docs.docker.com/engine/security/userns-remap/
我遇到过这种情况,客户端报告主机正在运行,但在进行某些未知更新后它停止工作。我仍在寻找一个连贯的解释。修复后我会更新。