本文目录导读:

在Shell脚本中复制容器内外文件,主要使用 docker cp 命令,以下是详细的用法和示例:
基本语法
docker cp [OPTIONS] SRC_PATH DEST_PATH docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
常用操作示例
从主机复制到容器
#!/bin/bash # 复制单个文件到容器 docker cp /host/path/file.txt container_name:/container/path/ # 复制整个目录到容器 docker cp /host/path/dir/ container_name:/container/path/
从容器复制到主机
#!/bin/bash # 从容器复制文件到主机 docker cp container_name:/container/path/file.txt /host/path/ # 从容器复制目录到主机 docker cp container_name:/container/path/dir/ /host/path/
完整脚本示例
#!/bin/bash
# 容器名称或ID
CONTAINER_NAME="myapp_container"
# 检查容器是否在运行
if docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
echo "容器 $CONTAINER_NAME 正在运行"
# 复制配置文件到容器
echo "复制配置文件到容器..."
docker cp ./nginx.conf ${CONTAINER_NAME}:/etc/nginx/nginx.conf
# 从容器复制日志文件
echo "从容器复制日志文件..."
docker cp ${CONTAINER_NAME}:/var/log/app.log ./backup/
# 复制整个目录
echo "复制应用代码到容器..."
docker cp ./dist/ ${CONTAINER_NAME}:/usr/share/nginx/html/
echo "文件复制完成"
else
echo "错误: 容器 $CONTAINER_NAME 未运行"
exit 1
fi
高级用法
批量复制多个文件
#!/bin/bash
CONTAINER="webapp"
SRC_FILES=("config.json" "index.html" "style.css")
DEST_PATH="/var/www/html/"
for file in "${SRC_FILES[@]}"; do
if [ -f "$file" ]; then
docker cp "$file" "$CONTAINER:$DEST_PATH"
echo "已复制: $file"
else
echo "警告: $file 不存在"
fi
done
使用变量和错误处理
#!/bin/bash
copy_to_container() {
local source=$1
local container=$2
local destination=$3
if [ ! -e "$source" ]; then
echo "错误: 源路径 $source 不存在"
return 1
fi
if ! docker container inspect "$container" >/dev/null 2>&1; then
echo "错误: 容器 $container 不存在"
return 1
fi
docker cp "$source" "$container:$destination"
local status=$?
if [ $status -eq 0 ]; then
echo "成功: $source -> $container:$destination"
else
echo "失败: 复制 $source 到容器失败"
fi
return $status
}
# 使用函数
copy_to_container "./backup.sql" "database" "/tmp/"
注意事项
-
容器必须运行:
docker cp需要在容器运行时执行 -
路径格式:
- 主机路径:使用绝对路径或相对路径
- 容器路径:可以是绝对路径或相对工作目录的路径
-
权限问题:
# 复制文件后可能需要调整权限 docker exec container_name chmod 644 /path/to/file docker exec container_name chown user:group /path/to/file
-
大文件传输:
# 对于大文件,建议使用压缩 tar czf - /source/path | docker exec -i container_name tar xzf - -C /destination/path
其他工具
除了 docker cp,还有以下替代方案:
# 使用 docker exec 和重定向 cat file.txt | docker exec -i container_name tee /path/to/file.txt # 使用卷挂载(推荐用于持久化数据) docker run -v /host/path:/container/path image_name
docker cp 是最简单直接的方法,适合临时文件传输,对于生产环境,建议使用卷挂载或数据卷容器来管理持久数据。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播