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

如何直接在安装Docker的Linux服务器上构建镜像无需传输本地文件?

问题解答

核心前提说明

不能直接在Dockerfile中将ARG JAR_FILE写为服务器的任意绝对路径:Docker构建时仅能读取构建上下文(即执行docker build命令时指定的目录及其子目录)内的文件,路径不在上下文范围内的话COPY指令会直接报错。

你需要的「不用手动把文件复制到服务器、直接在服务端构建镜像」的需求完全可以实现,推荐以下3种方案:


方案1:通过Docker远程访问从Windows端触发服务端构建(最适配你的场景)

该方案无需手动传输任何文件,构建上下文会自动从Windows同步到服务器,原有Dockerfile不用做任何修改。

  • 第一步:Linux服务器端配置Docker开放远程访问
    编辑Docker服务配置文件(通常为/usr/lib/systemd/system/docker.service),修改ExecStart配置项,在原有参数后追加:
    -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
    
    注意:生产环境必须配置TLS认证避免未授权访问风险,测试环境可临时用上述配置。
    执行以下命令重启Docker生效:
    systemctl daemon-reload
    systemctl restart docker
    
  • 第二步:Windows本地配置Docker客户端指向远程服务端
    打开PowerShell/CMD,执行临时生效命令:
    set DOCKER_HOST=tcp://你的服务器IP:2375
    
  • 第三步:直接在Windows本地执行构建
    切换到Windows本地的项目根目录(包含Dockerfile和编译好的jar包的目录),直接执行:
    docker build -t 自定义镜像名 .
    
    Docker会自动把当前目录作为构建上下文传输到服务端,完成镜像构建,全程不需要手动复制文件。

方案2:服务器本地构建(仅需传输jar包)

如果不想开放Docker远程端口,可仅把编译好的jar包传到服务器,调整构建命令即可:

  • 把Dockerfile上传到服务器任意目录,比如/opt/docker/Dockerfile
  • 把jar包传到服务器的固定目录,比如/opt/build/jars/
  • 执行构建时指定上下文为jar包所在目录:
    docker build -t 自定义镜像名 -f /opt/docker/Dockerfile /opt/build/jars/
    
    此时Dockerfile中的ARG JAR_FILE可以修改为ARG JAR_FILE=./*.jar,即可正常读取jar包。

方案3:共享目录挂载构建

如果你的Windows项目目录已经通过SMB、NFS等协议共享挂载到Linux服务器,直接在服务器上进入挂载后的项目目录,执行docker build命令即可,无需手动复制文件。

注意:使用远程构建方案时,建议在项目根目录添加.dockerignore文件,排除node_modules、日志、临时缓存等无关文件,避免构建上下文传输过慢。


内容的提问来源于stack exchange,提问作者nee nee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:57:03