Docker运行脚本与本地执行结果不一致:文件数量不符
Docker容器运行脚本与本地结果不一致问题排查
提供的Dockerfile内容:
FROM ubuntu RUN apt-get update && apt-get install -y figlet WORKDIR /app COPY scriptas.sh /app/scriptas.sh CMD figlet "NEDAS KAIRYS MKDF-23/1"&& chmod +x /app/scriptas.sh && ./scriptas.sh && ls darbas
提供的script.sh内容:
#!/bin/bash rm - fr darbas mkdir darbas for i in $(find /etc -name '*.conf') do dydis=$(du -b "$i" | cut -f1) vardas=$(basename "$i") cp -r "$i" "darbas/${dydis)_${vardas}" done
问题原因分析:
- 基础镜像与本地系统的核心差异:Docker使用的
ubuntu镜像默认是最小化基础版本,仅包含系统运行必需的核心组件;而本地运行的Ubuntu通常是完整安装状态,可能额外部署了大量软件包,这些软件会在/etc目录生成大量.conf配置文件。容器内/etc下的.conf文件数量远少于本地系统,因此脚本复制的文件数量自然更少。 - 脚本语法错误(不影响文件数量,但需修正):
rm - fr darbas存在空格错误,正确写法应为rm -rf darbas,当前写法会导致rm命令参数解析失败,但后续mkdir darbas仍可正常执行;- 文件名拼接处
${dydis)_${vardas}存在符号错误,右括号应为下划线,正确写法是${dydis}_${vardas},此错误会导致生成的文件名格式异常,但不影响最终文件数量。
验证方法:
分别在本地环境和容器内执行find /etc -name '*.conf' | wc -l,对比两者输出的文件数量,即可确认核心原因是镜像与本地系统的配置文件数量差异。
内容的提问来源于stack exchange,提问作者user23122157
相关产品推荐
相关产品推荐

