Docker中使用新可执行文件覆盖entrypoint失败问题排查
问题
在GitHub Actions步骤中尝试用新的可执行文件覆盖Docker镜像的entrypoint,执行的命令如下:
- name: run docker run: | ls -l docker run \ -v $GOOGLE_GHA_CREDS_PATH:/credentials.json \ -v entrypoint-new:/usr/bin/entrypoint-new \ --entrypoint /usr/bin/entrypoint-new \ my-image:latest
执行ls -l可见本地的entrypoint-new文件存在且具备可执行权限:
-rw-r--r-- 1 runner docker 2577 Sep 21 16:57 README.md -rwxr-xr-x 1 runner docker 100 Sep 21 16:57 entrypoint-new -rw-r----- 1 runner docker 4056 Sep 21 16:57 gha-creds-12345.json
但运行docker run时提示错误:
exec: "/usr/bin/entrypoint-new": permission denied: unknown.
原因分析
- Docker挂载语法错误:你写的
-v entrypoint-new:/usr/bin/entrypoint-new会被Docker识别为创建或使用名为entrypoint-new的命名卷,而非挂载本地的entrypoint-new文件到容器内。命名卷中的文件和你本地的文件完全无关,自然没有执行权限。 - 本地
ls看到的执行权限只在宿主机生效,容器内实际加载的是命名卷里的无权限文件(或空文件),因此触发权限拒绝错误。 - 正确的本地文件挂载语法应该指定本地文件的路径(绝对路径或相对路径),比如如果entrypoint-new在当前工作目录,应改为:
-v ./entrypoint-new:/usr/bin/entrypoint-new。
内容的提问来源于stack exchange,提问作者pkaramol
相关产品推荐
相关产品推荐

