我正在基于arm的32位设备上运行docker。
但是,当我尝试通过命令docker run -it ubuntu bash
将ubuntu bash shell作为docker容器运行时,我不断收到以下错误:
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
如果有人能告诉我哪里出了什么问题以及如何解决这个问题,那将是很棒的事情。
答案 0 :(得分:0)
您的操作系统似乎缺少伪终端(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内核中。也许缺少它与您的OS体系结构有关。另外,我不确定如何解决,也许尝试更新和升级操作系统。
如果不需要tty,快速的解决方法是跳过-t
标志:
docker run -i ubuntu bash
在docker run -it
中,-i/--interactive
表示“保持stdin打开”,而-t/--tty
表示“告诉容器stdin是伪tty”。这里的关键是“交互”一词。如果省略该标志,则容器仍将执行/bin/bash
,但立即退出。带有该标志的容器将执行/bin/bash
,然后耐心等待您的输入。这意味着现在您将在容器内进行bash会话,因此可以ls
,mkdir
或在容器内执行任何bash命令。
答案 1 :(得分:0)
可能是因为某种原因,您的 docker 容器找不到自己的 /dev/ptmx
,甚至可能根本找不到您的 /dev/
。
一个快速的解决方案是:
docker run -it -v /dev:/dev ubuntu bash
这会将您的 /dev/
目录绑定到容器的目录,这意味着它们将使用相同的文件。
请注意,虽然此操作本身是无害的,但在生产环境中,这意味着主机和容器设备之间的隔离已经消失。
因此,请确保只在测试环境中使用此技巧。