使用docker run命令获取结果,不包含任何文件或目录

问题描述 投票:0回答:1

[当我对诸如docker run ubuntu cat /etc/*release*的docker镜像运行命令时,得到以下结果。为什么我会得到“没有这样的文件或目录”以及结果?我在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
docker centos
1个回答
1
投票

运行您运行这样的命令,您的local shell将对其进行处理,扩展所有glob,并生成实际执行的单词序列。也就是说,

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

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

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

  1. 单引号,这样您的本地外壳程序不会对其进行扩展;和

  2. 明确地使Docker在容器内运行一个shell来在那里进行扩展。

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

[如果您正在使用Shell Glob,重定向或尝试按顺序运行多个命令之类的内容,则仅需要sh -c包装器。在Dockerfile上下文中,Docker将在sh -cRUN语句中自动为您添加CMD

© www.soinside.com 2019 - 2024. All rights reserved.