首页 > 解决方案 > 问题:在 docker 中运行 ubuntu bash shell 时出错

问题描述

我在基于 arm 的 32 位设备上运行 docker。

但是,当我尝试通过命令 : 将 ubuntu bash shell 作为 docker 容器运行时docker run -it ubuntu bash,我不断收到以下错误:

docker: Error response from daemon: OCI runtime create failed: 
container_linux.go:348: starting container process caused 
"process_linux.go:402: container init caused \"open /dev/ptmx: no such file or directory\"": unknown.

这是docker info给出的:

Containers: 4
Running: 0
Paused: 0
Stopped: 4
Images: 3
Server Version: 18.06.1-ce
Storage Driver: vfs
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e
runc version: 69663f0bd4b60df09991c08812a60108003fa340
init version: fec3683
Security Options:
 seccomp
  Profile: default
Kernel Version: 3.10.65-00273-gfa38327-dirty
OSType: linux
Architecture: armv7l
CPUs: 4
Total Memory: 923MiB
ID: 2PDV:3KHU:VZZM:DM6F:4MVR:TXBN:35YJ:VWP5:TMHD:GMKW:TPMI:MALC
Docker Root Dir: /opt/usr/media/docker_workdir
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

如果有人能告诉我出了什么问题以及我该如何解决这个问题,那就太好了?

标签: bashdockerubuntuarm

解决方案


看起来您的操作系统缺少伪终端 (PTY) - 一种具有物理终端功能但实际上并非其功能的设备。

文件/dev/ptmx是一个字符文件,主编号为 5,次编号为 2,通常模式为 0666,owner.group 为 root.root。它用于创建伪终端主从对。

文件

  • /dev/ptmx - UNIX 98 主克隆设备
  • /dev/pts/* - UNIX 98 从设备
  • /dev/pty[p-za-e][0-9a-f] - BSD 主设备
  • /dev/tty[p-za-e][0-9a-f] - BSD 从设备

参考: http: //man7.org/linux/man-pages/man7/pty.7.html

这默认包含在 Linux 内核中。也许缺少它与您的操作系统架构有关。另外,我不确定您如何修复,也许尝试更新&&升级操作系统。

如果您不需要 tty,则快速解决方法是跳过-t标志:

docker run -i ubuntu bash

docker run -it, 中-i/--interactive表示“保持标准输入打开”并-t/--tty表示“告诉容器标准输入是伪 tty”。这里的关键是“交互式”这个词。如果省略该标志,容器仍会执行/bin/bash但立即退出。使用该标志,容器将执行,/bin/bash然后耐心等待您的输入。这意味着现在您将在容器内拥有 bash 会话,因此您可以lsmkdir容器内执行任何 bash 命令。


推荐阅读