You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过命令行构建Docker镜像时找不到data.sql文件的问题

解决 Docker Build 找不到 data.sql 的问题

你遇到的问题根源在于:用 docker build - <<EOF 这种从标准输入读取 Dockerfile 的方式时,Docker 不会自动将当前目录的文件作为构建上下文传给守护进程,所以 COPY 指令找不到本地的 data.sql。

给你两种解决办法:

方法一:用常规 Dockerfile 文件构建

  1. 在当前目录创建 Dockerfile 文件,内容如下:
    FROM mysql:8
    ENV MYSQL_ROOT_PASSWORD=password
    COPY ./data.sql /docker/entrypoint-initdb.d/
    
  2. 执行构建命令:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 00:10:20