通过Bash脚本构建Docker镜像时遇COPY文件不存在错误
问题解决思路
核心原因
你用docker build - < $2这种通过标准输入传递Dockerfile的方式,没有指定构建上下文目录。Docker构建时只会读取你传入的Dockerfile内容,不会自动包含宿主机上的migrations目录——这就是COPY指令提示找不到文件的根本原因。
修复步骤
- 修改你的Bash脚本,改用带上下文的构建命令:
docker build -t $1 -f $2 $(dirname "$2")
-f $2:指定自定义路径的Dockerfile$(dirname "$2"):获取Dockerfile所在的目录作为构建上下文,这样Docker daemon就能访问该目录下的migrations文件夹了
- 顺便修正Dockerfile里的冗余配置:
你重复设置了POSTGRES_DB环境变量,后面的123会覆盖前面的pointer,建议删掉其中一行,比如保留你实际需要的数据库名:
FROM postgres WORKDIR ./bacisImage # 只保留一个POSTGRES_DB设置 ENV POSTGRES_DB pointer ENV POSTGRES_PASSWORD pointer COPY migrations/tables/* /docker-entrypoint-initdb.d/ COPY migrations/procedures/* /docker-entrypoint-initdb.d/
验证方式
运行修改后的脚本,确保Dockerfile所在目录下确实存在migrations/tables和migrations/procedures目录,且里面有文件——这样COPY指令就能正常把这些文件复制到镜像里了。
内容的提问来源于stack exchange,提问作者Mishamba
相关产品推荐
相关产品推荐

