基于Docker Logstash镜像的容器无法创建自定义文件夹及复制Ruby脚本问题
解决Logstash容器中Ruby脚本复制失败的问题
让我来帮你排查下这个问题,大概率是COPY命令的路径匹配出了问题,结合你的描述和Dockerfile内容,我整理了几个关键点和修复方案:
1. 修正COPY命令的源路径
你提到Ruby脚本是直接放在Dockerfile的同一目录下,但你的Dockerfile里写的是COPY ./scripts/*.rb scripts——这会让Docker去寻找本地scripts子文件夹里的.rb文件,而你的脚本根本不在这个子文件夹里,自然复制失败!
把COPY命令改成这样:
COPY *.rb scripts/
这样Docker就会从Dockerfile所在的当前目录(.)里抓取所有.rb文件,复制到容器内WORKDIR(/usr/share/logstash)下的scripts文件夹里。
2. 可选:简化目录创建步骤
其实COPY命令如果目标目录不存在,会自动帮你创建,所以你原来的RUN mkdir scripts可以省略,当然保留也没问题,不会有冲突。
3. 排查其他可能的原因
- 确认构建命令的执行目录:你必须在Dockerfile所在的目录下执行
docker build命令,否则COPY的相对路径会出错。比如你的Dockerfile在/home/user/my-logstash,就先cd到这个目录再构建。 - 检查.dockerignore文件:如果你的目录下有
.dockerignore文件,看看里面是不是写了*.rb或者scripts相关的规则,这会阻止Docker复制这些文件。如果有的话,把对应的规则删掉。
修复后的完整Dockerfile示例
FROM docker.elastic.co/logstash/logstash:${ELK_VERSION} USER root WORKDIR /usr/share/logstash # RUN mkdir scripts # 可选,因为COPY会自动创建目标目录 COPY *.rb scripts/
构建完成后,进入容器执行ls /usr/share/logstash/scripts,应该就能看到你的Ruby脚本了。
内容的提问来源于stack exchange,提问作者Djellal Mohamed Aniss
相关产品推荐
相关产品推荐

