[当我对诸如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
运行您运行这样的命令,您的local shell将对其进行处理,扩展所有glob,并生成实际执行的单词序列。也就是说,
您的本地shell看到/etc/*release*
并将其替换为主机系统上存在的一组匹配文件;然后
它运行扩展命令docker run ubuntu cat /etc/centos-release /etc/centos-release-upstream ...
。
您需要做两件事才能使此类命令起作用:
单引号,这样您的本地外壳程序不会对其进行扩展;和
明确地使Docker在容器内运行一个shell来在那里进行扩展。
docker run --rm ubuntu sh -c 'cat /etc/*release*'
[如果您正在使用Shell Glob,重定向或尝试按顺序运行多个命令之类的内容,则仅需要sh -c
包装器。在Dockerfile上下文中,Docker将在sh -c
和RUN
语句中自动为您添加CMD
。