问题:在docker

时间:2018-11-26 09:50:17

标签: bash docker ubuntu arm

我正在基于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

如果有人能告诉我哪里出了什么问题以及如何解决这个问题,那将是很棒的事情。

2 个答案:

答案 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会话,因此可以lsmkdir或在容器内执行任何bash命令。

答案 1 :(得分:0)

可能是因为某种原因,您的 docker 容器找不到自己的 /dev/ptmx,甚至可能根本找不到您的 /dev/

一个快速的解决方案是:

docker run -it -v /dev:/dev ubuntu bash

这会将您的 /dev/ 目录绑定到容器的目录,这意味着它们将使用相同的文件。 请注意,虽然此操作本身是无害的,但在生产环境中,这意味着主机和容器设备之间的隔离已经消失。

因此,请确保只在测试环境中使用此技巧。