无法在 Docker 容器中运行命令

Posted

技术标签:

【中文标题】无法在 Docker 容器中运行命令【英文标题】:Cannot run command in Docker container 【发布时间】:2019-05-05 10:48:24 【问题描述】:

我正在尝试通过

在名为“bind”的 docker 容器中执行 bash
docker exec -it bind bash

我收到以下错误消息:

rpc error: code = 2 desc = oci runtime error: exec failed: 
container_linux.go:247: starting container process caused "process_linux.go:110: 
decoding init error from pipe caused \"read parent: connection reset by peer\""

日志中没有什么特别之处。重新启动 docker 或容器似乎没有效果。我还确保硬盘驱动器上有足够的空间。在容器中启动任何其他二进制文件都会产生相同的错误。

版本信息:

docker --version:

Docker version 1.13.1, build 07f3374/1.13.1

操作系统:

cat /etc/redhat-release 

CentOS Linux release 7.6.1810 (Core) 

任何帮助将不胜感激。

【问题讨论】:

里面有一个绑定,是的,有一个bash。尝试在内部运行任何命令(例如“sh”)会产生相同的结果。 什么是基础镜像? 请同时发布您用于启动容器的命令(docker run …docker-compose up … 【参考方案1】:

这是一个已知问题,已在较新的 docker 软件包中得到修复: https://bugzilla.redhat.com/show_bug.cgi?id=1655214

对于那些无法升级的问题,William Brown 在问题中提到了一种不需要降级的解决方法。

PID=docker inspect --format .State.Pid <name of container>
nsenter --target $PID --mount --uts --ipc --net --pid /bin/sh

希望这对你有用

【讨论】:

【参考方案2】:

如果你使用

yum update

之前也不知道老版本的docker是什么,直接运行就行了

yum downgrade docker docker-client docker-common

对我有用

【讨论】:

【参考方案3】:

这似乎是最近更新 docker RPM 包时引入的错误。一个临时的解决方法是将所有 docker 包降级到以前的版本(75 似乎可以工作)。

yum downgrade docker-1.13.1-75.git8633870.el7_5 \
              docker-client-1.13.1-75.git8633870.el7_5 \
              docker-common-1.13.1-75.git8633870.el7_5 \
              docker-rhel-push-plugin-1.13.1-75.git8633870.el7_5

【讨论】:

【参考方案4】:

这是关于 Red Hat 的 bugzilla 的错误报告:https://bugzilla.redhat.com/show_bug.cgi?id=1655214

【讨论】:

【参考方案5】:

今天我安装了 docker 的更新(Centos 上的版本 1.13.1-84),从那以后我的所有容器也遇到了同样的问题。

降级到版本 1.13.1-75 对我有用。

【讨论】:

【参考方案6】:

"Connection reset by peer",一般发生在端口不匹配的情况下。就像您没有公开端口并尝试使用它,或者端口映射不正确。事实上,如果是服务a被绑定到本地主机,请检查它,因为如果你想托管一个服务,你可能想把它绑定到0.0.0.0

此错误可能与很多问题有关。但是,主要是它与绑定错误的端口和错误的 IP 一致。

【讨论】:

绑定到0.0.0.0。被转发的唯一端口是 53 和 10000。容器内的绑定也可以正常工作。只是我不能 docker exec 进入容器。 感谢Fang提供的信息,请告诉我命令是什么。理想情况下,应该是 docker exec -it "container_name" bash 。在这种情况下,您需要确保容器应该允许 bash。你能评论一下吗 我今天也看到了同样的情况。只需在干净的 VM 上旋转香草 nginx。运行“docker exec test id”会产生相同的错误。我正在运行 Linux 3.10.0-693.el7.x86_64 和 Docker 1.13.1。【参考方案7】:

我认为这是因为缺少权限。

尝试使用 sudo 运行 docker,如下所示。

sudo docker exec -it 绑定 bash

希望这会有所帮助。

【讨论】:

不,不是这个原因。

以上是关于无法在 Docker 容器中运行命令的主要内容,如果未能解决你的问题,请参考以下文章

如何在容器中运行docker命令

无法在本地机器上通过 ebcli 运行 docker 容器

docker命令总结

为啥docker容器内无法启动tomcat,容器外可以

无法在 CentOS 上运行的 Docker 容器中使用 yum

如何在 docker 容器中运行 npm 命令?