Dockerfile构建OPA服务报错:No such file or directory
解决OPA服务Docker构建失败的问题
问题根源
- 指令语法错误:你把
EXPOSE 8181这个Docker专属指令和chmod命令塞进了同一个RUN行里。Docker会把整行内容当作shell命令执行,chmod会误以为EXPOSE和8181是要修改权限的文件名,找不到这些文件就直接报错。 - 二进制版本不兼容:你下载的是
opa_darwin_amd64版本,这是给macOS系统用的可执行文件。而你的基础镜像是Alpine(Linux系统),就算权限设置正确,这个二进制文件也没法在Linux容器里运行。
修正后的Dockerfile
# Build OPA Service directory, load policies and data, install and run OPA daemon FROM alpine:latest RUN apk --no-cache add curl ADD $PWD/data /data VOLUME /data # 下载适配Linux amd64架构的OPA二进制文件 RUN curl -L -o opa https://openpolicyagent.org/downloads/v0.46.1/opa_linux_amd64 # 单独执行权限修改命令 RUN chmod 777 ./opa # 单独声明容器要暴露的端口 EXPOSE 8181 CMD ./opa run -s ./data --skip-version-check
修改说明
- 拆分指令:把
EXPOSE 8181从RUN命令里分离出来,作为独立的Docker指令,明确告知Docker要暴露8181端口。 - 替换二进制版本:将下载链接中的
opa_darwin_amd64改为opa_linux_amd64,确保下载的是适配Linux环境的可执行文件。
内容的提问来源于stack exchange,提问作者Siva Prasad Koka
相关产品推荐
相关产品推荐

