Docker运行容器报错permission denied,请求协助解决问题
问题:Docker容器启动时提示权限拒绝(permission denied)
启动容器时遇到以下错误:
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "./deployment-service": permission denied: unknown.
我的Dockerfile:
FROM golang:1.19.2-alpine as builder RUN apk add bash RUN apk add --no-cache openssh-client ansible git RUN mkdir /workspace WORKDIR /workspace COPY go.mod ./ COPY go.sum ./ RUN go mod download COPY . ./ RUN go build -o deployment-service cmd/deployment-service/main.go FROM alpine:latest RUN apk --no-cache add ca-certificates WORKDIR /root/ COPY --from=builder /workspace . ARG DEFAULT_PORT=8080 ENV PORT $DEFAULT_PORT EXPOSE $PORT CMD ["./deployment-service"]
运行命令:
docker run --name=${CONTAINER_NAME} -d --rm -p ${PORT}:80 -e DEPLOYMENT_SERVICE_DATABASE_CONNECTION_URI=mongodb://${MONGO_USERNAME}:${MONGO_PASSWORD}@${MONGO_CONTAINER_NAME}:27017/ -e DEPLOYMENT_SERVICE_SERVER_SECRET_KEY=${SECRET_KEY} -e ANSIBLE_CONFIG='./jam-ansible/ansible.cfg' -e DEPLOYMENT_SERVICE_ANSIBLE_SUBMISSION_ROOT=${DEPLOYMENT_ROOT} -v ${DEPLOYMENT_VOLUME}:${DEPLOYMENT_ROOT} --network=${NETWORK_NAME} server:latest
解决方法:
1. 为二进制文件添加执行权限
报错核心原因是deployment-service二进制文件缺少执行权限,可通过两种方式处理:
- Builder阶段处理:编译完成后直接添加权限
修改builder阶段最后一条命令:RUN go build -o deployment-service cmd/deployment-service/main.go && chmod +x deployment-service - 最终镜像阶段处理:复制文件后添加权限
在COPY --from=builder /workspace .之后添加:RUN chmod +x ./deployment-service
2. 优化复制路径(推荐)
当前Dockerfile复制了整个/workspace目录到最终镜像,其实仅需复制编译好的二进制文件即可,既减少镜像体积,也避免不必要的权限问题:
修改最终阶段的COPY命令:
COPY --from=builder /workspace/deployment-service ./
3. 手动验证权限
如果问题仍存在,可临时进入镜像检查文件权限:
docker run --rm -it server:latest sh # 执行以下命令查看权限 ls -l ./deployment-service
若输出中无x标识,说明仍需添加执行权限。
内容的提问来源于stack exchange,提问作者Deeksha Sharma
相关产品推荐
相关产品推荐

