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位置,导致你试图执行一个目录,自然触发权限拒绝。解决步骤:
- 检查本地路径类型:先确认本地的
./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
- 如果是目录:把wait脚本放在该目录下(比如命名为
- 修正权限操作:之前command里的
chmod 777 /app/wait-for对目录无效,等挂载正确的脚本文件后,确保文件有可执行权限(本地先加chmod +x,或者容器里执行chmod +x /app/wait-for)。
- 检查本地路径类型:先确认本地的
内容的提问来源于stack exchange,提问作者mumia
相关产品推荐
相关产品推荐

