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

Docker容器Entrypoint中rsync执行报错问题排查

问题分析与解决

错误原因

你使用了exec形式的ENTRYPOINT(数组语法),这种模式下Docker会直接执行指定命令,不会通过Shell解析参数。因此/var/www/html2/*里的通配符*不会被展开,rsync会把它当作一个名为*的具体文件去查找,自然找不到对应文件,从而报错。

解决方案

以下是几种可行的修复方式:

方式1:改用Shell形式的ENTRYPOINT

让Shell处理通配符展开,将ENTRYPOINT改为字符串形式:

ENTRYPOINT /usr/bin/rsync -r -A /var/www/html2/* /var/www/html/

方式2:去掉通配符,使用rsync目录同步语法

rsync支持通过目录末尾的斜杠同步目录内所有内容,无需依赖Shell通配符。修改ENTRYPOINT为:

ENTRYPOINT ["/usr/bin/rsync", "-r", "-A", "/var/www/html2/", "/var/www/html/"]

注意:/var/www/html2/末尾的斜杠是关键,它表示同步该目录下的所有内容到目标目录;如果不带斜杠,会把html2目录本身复制到html目录下,形成/var/www/html/html2结构。

方式3:使用自定义Shell脚本作为Entrypoint

如果后续需要添加更多启动逻辑,推荐编写简单的Shell脚本:

  1. 在Dockerfile同目录下创建entrypoint.sh:
#!/bin/sh
/usr/bin/rsync -r -A /var/www/html2/* /var/www/html/
# 可在此添加其他启动命令,例如启动php-fpm
exec php-fpm
  1. 给脚本添加执行权限:chmod +x entrypoint.sh
  2. 修改Dockerfile:
COPY entrypoint.sh /usr/local/bin/
ENTRYPOINT ["entrypoint.sh"]

验证

修改后重新构建镜像并启动容器,rsync即可正常同步html2目录下的内容到html目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 05:28:19