【问题标题】:Issue: Error while running ubuntu bash shell in docker问题:在 docker 中运行 ubuntu bash shell 时出错
【发布时间】:2019-04-27 22:35:18
【问题描述】:

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

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

【问题讨论】:

    标签: bash docker ubuntu arm


    【解决方案1】:

    可能由于某种原因,您的 docker 容器找不到自己的/dev/ptmx,甚至可能找不到您的/dev/

    一个快速的解决方案是:

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

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

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

    【讨论】:

      【解决方案2】:

      您的操作系统似乎缺少伪终端 (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 命令。

      【讨论】:

      • @GauravMishra 不客气 :)。如果我的回答解决了您的问题,那么我可以得到接受的答案吗?
      • @RaoslawSzamsur 完成 :)
      • 它可以在不使用 -t 的情况下工作,但仍然想知道发生了什么,因为我可以在 /dev/ 中找到 /dev/ptmx 文件。
      猜你喜欢
      • 2017-02-20
      • 2022-09-16
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 2020-11-10
      • 1970-01-01
      相关资源
      最近更新 更多