docker - 使用 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
解决方案
运行你运行这样的命令,你的本地shell 处理它,扩展任何 glob,并生成一个实际执行的单词序列。那是,
您的本地 shell 会看到
/etc/*release*
并用主机系统上存在的一组匹配文件替换它;然后它运行扩展命令
docker run ubuntu cat /etc/centos-release /etc/centos-release-upstream ...
。
您需要做两件事才能使此类命令起作用:
单引号命令,这样你的本地 shell 就不会扩展它;和
显式地使 Docker 在容器内运行一个 shell 以在那里进行扩展。
docker run --rm ubuntu sh -c 'cat /etc/*release*'
sh -c
仅当您使用 shell glob、重定向或尝试按顺序运行多个命令时才需要包装器。在 Dockerfile 上下文中,Docker 会自动sh -c
为您添加RUN
和CMD
语句。
推荐阅读
- c++ - 类的默认返回
- meteor - 如何防止模板重新渲染 {{#each}} 块中的每个元素?
- php - 登录/注册 PHP 面向对象样式错误
- sql - SQL Server 上是否有类似于 Oracle 的 PIPE ROW 的代码?
- python - TypeError:ufunc'add'不包含签名匹配类型的循环(dtype('
dtype(' 我运行我的代码,它在第 79 行抛出错误:
numpy.core._exceptions.UFuncTypeError: ufunc 'add' did not contain a loop with signature matc
- excel - 我可以复制数据透视表列而不将数据与另一列组合吗?
- azure - Umbraco 8 网站和 Azure CDN(页面缓存不起作用)
- gradle - intellij idea gradle 生成的源在自定义想法插件上无法识别
- react-native - 我无法通过 TouchableOpacity 的 onPress() 调用函数
- javascript - 滚动时的Javascript If/Else悖论设置值