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

CircleCI容器内运行wait-for脚本遭遇Permission denied问题求助

问题描述

尝试在CircleCI容器中运行wait脚本,配置如下(已添加调试命令):

eventstore-available:
  build:
    context: "."
    dockerfile: docker/waitfor.dockerfile
  command: sh -c 'which sh && chmod 777 /app/wait-for && whoami && ls -la /app && /app/wait-for http://eventstore-karate:2113/health/live -t 0 -- echo "Eventstore is up!"'
  volumes:
    - "./docker/karate/wait-for:/app/wait-for"
  depends_on:
    eventstore-karate:
      condition: service_started
  networks:
    app-karate: ~

但始终遇到权限拒绝错误,报错信息:

repo-eventstore-available-1  | /bin/sh
repo-eventstore-available-1  | root
repo-eventstore-available-1  | total 12
repo-eventstore-available-1  | drwxr-xr-x  3 root root 4096 Feb 10 16:53 .
repo-eventstore-available-1  | drwxr-xr-x  1 root root 4096 Feb 10 16:53 ..
repo-eventstore-available-1  | drwxrwxrwx  2 root root 4096 Feb 10 16:53 wait-for
repo-eventstore-available-1  | sh: /app/wait-for: Permission denied
repo-eventstore-available-1 exited with code 126

问题根源与解决方法

  • 核心问题:从报错里的ls -la结果能明确看到,/app/wait-for是个目录,并非你要执行的脚本文件。Docker挂载卷时,若本地的./docker/karate/wait-for是目录,就会把这个目录完整挂载到容器的/app/wait-for位置,导致你试图执行一个目录,自然触发权限拒绝。

  • 解决步骤:

    1. 检查本地路径类型:先确认本地的./docker/karate/wait-for是脚本文件还是目录:
      • 如果是目录:把wait脚本放在该目录下(比如命名为wait-for.sh),然后修改volumes配置为./docker/karate/wait-for:/app,之后执行/app/wait-for.sh;或者直接挂载文件:./docker/karate/wait-for/wait-for.sh:/app/wait-for。
      • 如果是误创建的目录:删除该目录,重新创建脚本文件:
        rm -rf ./docker/karate/wait-for
        # 创建脚本文件并写入内容
        cat > ./docker/karate/wait-for << 'EOF'
        # 这里写入你的wait脚本内容
        EOF
        chmod +x ./docker/karate/wait-for
        
    2. 修正权限操作:之前command里的chmod 777 /app/wait-for对目录无效,等挂载正确的脚本文件后,确保文件有可执行权限(本地先加chmod +x,或者容器里执行chmod +x /app/wait-for)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 12:40:20