首页 > 解决方案 > 使用 docker run 命令获取结果加上没有文件或目录

问题描述

当我对 docker 映像运行命令时,例如docker run ubuntu cat /etc/*release*我得到以下结果。为什么我会得到“没有这样的文件或目录”以及结果?我在 CentOS 8 上运行 docker CE 版本 19.03.5。谢谢。

cat: /etc/centos-release: No such file or directory
cat: /etc/centos-release-upstream: No such file or directory
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.3 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
cat: /etc/redhat-release: No such file or directory
cat: /etc/system-release: No such file or directory
cat: /etc/system-release-cpe: No such file or directory

标签: dockercentos

解决方案


运行你运行这样的命令,你的本地shell 处理它,扩展任何 glob,并生成一个实际执行的单词序列。那是,

  1. 您的本地 shell 会看到/etc/*release*并用主机系统上存在的一组匹配文件替换它;然后

  2. 它运行扩展命令docker run ubuntu cat /etc/centos-release /etc/centos-release-upstream ...

您需要做两件事才能使此类命令起作用:

  1. 单引号命令,这样你的本地 shell 就不会扩展它;和

  2. 显式地使 Docker 在容器内运行一个 shell 以在那里进行扩展。

    docker run --rm ubuntu sh -c 'cat /etc/*release*'
    

sh -c仅当您使用 shell glob、重定向或尝试按顺序运行多个命令时才需要包装器。在 Dockerfile 上下文中,Docker 会自动sh -c为您添加RUNCMD语句。


推荐阅读