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

如何将文件传输到Docker容器并执行代码,实现全流程自动化?

方案1:构建镜像时直接内置代码(最稳定,适合发布场景)

你之前的误区是RUN指令属于镜像构建阶段执行的命令,执行时还没有启动容器,也没有本地代码传入,只需要把拷贝文件的步骤提前放到Dockerfile里即可,完整Dockerfile示例如下:

# 基础镜像
FROM ubuntu:16.04
# 先安装编译依赖(ubuntu16.04默认没有gcc、make)
RUN apt update && apt install -y gcc make
# 创建工作目录
RUN mkdir -p /code/src
# 把本地当前目录下的src文件夹内容拷贝到镜像的/code/src路径
COPY src/ /code/src/
# 切换工作目录
WORKDIR /code/src/
# 构建阶段编译代码
RUN make
# 容器启动时默认执行的命令
CMD ["./hello_world"]

构建和运行命令:

# 构建镜像,在Dockerfile所在目录执行
docker build -t my_hello_app .
# 启动容器直接运行
docker run --name test_container my_hello_app

方案2:启动容器时挂载本地代码目录(适合开发调试,改代码不用重新构建镜像)

如果你的代码需要频繁修改,不想每次改完都重新构建镜像,可以只把依赖环境打包到镜像里,启动容器时把本地src目录挂载到容器内,直接运行编译执行命令:
Dockerfile示例:

FROM ubuntu:16.04
RUN apt update && apt install -y gcc make
RUN mkdir -p /code/src
WORKDIR /code/src/

构建镜像后,直接用挂载参数启动容器:

docker run --name test_container -v 本地src目录的绝对路径:/code/src my_hello_app bash -c "make && ./hello_world"

本地改完代码直接重新执行上面的run命令即可,不用重新build。


方案3:宿主机Shell脚本自动化原流程

如果一定要沿用你原来「启动空容器→拷文件→执行代码」的逻辑,直接在宿主机写个shell脚本串起所有命令即可,不需要改Dockerfile:
脚本内容示例:

#!/bin/bash
# 启动后台容器
docker run -d --name test_container my_image sleep infinity
# 拷贝本地文件到容器
docker cp src/. test_container:/code/src
# 进入容器执行编译运行命令
docker exec test_container bash -c "cd /code/src && make && ./hello_world"
# 运行完删除容器(可选)
docker rm -f test_container

给脚本加执行权限后直接运行即可完成全流程自动化。


之前方案出错的原因:

  1. RUN指令是镜像构建阶段执行的,此时容器还未启动,本地代码也没有传入镜像,自然找不到要编译的文件。
  2. docker cp是宿主机才能执行的命令,容器内部默认没有Docker客户端,也不可能在构建阶段操作还没创建的容器,所以写在Dockerfile的RUN里完全无法生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:18:02