无法在 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 容器中运行命令的主要内容,如果未能解决你的问题,请参考以下文章