通过命令行构建Docker镜像时找不到data.sql文件的问题
解决 Docker Build 找不到 data.sql 的问题
你遇到的问题根源在于:用 docker build - <<EOF 这种从标准输入读取 Dockerfile 的方式时,Docker 不会自动将当前目录的文件作为构建上下文传给守护进程,所以 COPY 指令找不到本地的 data.sql。
给你两种解决办法:
方法一:用常规 Dockerfile 文件构建
- 在当前目录创建
Dockerfile文件,内容如下:FROM mysql:8 ENV MYSQL_ROOT_PASSWORD=password COPY ./data.sql /docker/entrypoint-initdb.d/ - 执行构建命令:
docker build .
这种方式是 Docker 最常用的构建方式,会自动把当前目录作为上下文,包含所有文件(除了 .dockerignore 排除的),COPY 指令就能正常找到 data.sql。
方法二:保留 heredoc 方式,手动传递文件上下文
如果一定要用 heredoc 写 Dockerfile 的方式,需要把 data.sql 打包成上下文传给 Docker。可以用 tar 命令把文件打包后通过管道传给 docker build:
tar -c data.sql - | docker build - <<EOF FROM mysql:8 ENV MYSQL_ROOT_PASSWORD=password COPY data.sql /docker/entrypoint-initdb.d/ EOF
这里 tar -c data.sql - 把 data.sql 打包后输出到标准输出,docker build 会同时读取这个上下文和标准输入里的 Dockerfile,这样就能找到要复制的文件了。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

