Drone CI容器内如何将构建文件复制到宿主机?
解决Drone容器内复制文件到宿主机的问题
你的问题核心在于错误地尝试在Drone的build容器内调用宿主机的Docker命令——默认的Drone构建容器是轻量化的,既没有docker客户端,也没有sudo工具,而且这种方式本身也不符合CI/CD的最佳实践。
我给你推荐最安全、最简单的解决方案:直接通过挂载宿主机目录的方式,让Drone容器可以直接读写宿主机的目标路径,无需额外的Docker命令。
修改后的drone.yml配置
pipeline: build: image: node:7 commands: - cd client - npm config set registry https://registry.npm.taobao.org - npm install --no-optional - yarn run build # 直接将构建产物复制到挂载的宿主机目录 - cp -r ./build/* /build-output/ # 挂载宿主机的目标目录到容器内的/build-output volumes: - /var/www/react/:/build-output/
配置说明
- volumes字段:这行配置会把宿主机的
/var/www/react/目录,映射到构建容器内的/build-output/路径。容器内对/build-output/的读写操作,都会直接作用到宿主机的对应目录。 - 复制命令:把原来的
docker cp换成普通的cp命令,直接将client/build下的产物复制到挂载的目录即可。
注意事项
- 确保宿主机的
/var/www/react/目录权限正确:Drone构建容器默认使用非root用户运行,你需要确保该目录对容器用户有写入权限(可以通过chmod 777 /var/www/react/临时测试,或者更安全地设置对应用户组权限)。 - 如果你的Drone Runner是Docker模式,需要确认Runner本身有访问宿主机目录的权限(通常默认配置即可支持)。
这种方式既避免了在容器内调用宿主机Docker的安全风险,也比原来的方案更简洁可靠。
内容的提问来源于stack exchange,提问作者Tab Gre




