运行 `docker compose up -d --build` 时出现“权限被拒绝”

问题描述 投票:0回答:1

我正在尝试运行

docker compose up -d --build
一个现有的成功构建的项目(由
docker-compose build
),即DeathStarBench,它是一个用于运行多个微服务以相互交互的系统(可以在这个Github存储库中找到)。 以下代码显示了 Dockerfile 的内容:

FROM golang:1.21 as builder

WORKDIR /workspace

COPY go.sum go.sum
COPY go.mod go.mod
COPY vendor/ vendor/

COPY cmd/ cmd/
COPY dialer/ dialer/
COPY registry/ registry/
COPY services/ services/
COPY tls/ tls/
COPY tracing/ tracing/
COPY tune/ tune/

COPY config.json config.json

RUN CGO_ENABLED=0 GOOS=linux GO111MODULE=on go install -ldflags="-s -w" -mod=vendor ./cmd/...

此外,在

docker-compose.yaml
中,对于此存储库中的每个微服务,都有一条记录来确定其入口点以及一条记录来确定其相应的卷。例如,对于
recommendation
微服务,我们在
docker-compose.yaml
文件中有以下记录:

  # <other services configuration> 

  recommendation:
    configs:
      - source: server_config
        target: /config.json
    environment:
      - TLS
      - GC
      - JAEGER_SAMPLE_RATIO
      - LOG_LEVEL
    build: .
    image: deathstarbench/hotel-reservation:latest
    entrypoint: ./cmd/recommendation
    depends_on:
      - mongodb-recommendation
      - consul
    restart: always
    deploy:
      replicas: 1
      restart_policy:
        condition: any
  
  # ...

  volumes:
    # ...

    recommendation:

    # ...
  configs:
    server_config:
      file: ./config.json

对于

cmd
文件夹中列出的每个服务,yaml 文件中的入口点已设置为:
entrypoint: ./cmd/<name of the service>
,例如,对于
recommendation
服务,它是
entrypoint: ./cmd/recommendation
。看来这里的切入点是正确的。

运行平台是

Ubuntu 22.04
Docker version 26.1.1, build 4cf5afa
。 请注意,服务均在 Golang 中。

运行

docker compose up -d --build
时出现以下错误:

Error response from daemon: failed to create task for container: 
failed to create shim task: OCI runtime create failed: 
runc create failed: unable to start container process: 
exec: "./cmd/recommendation": is a directory: unknown: permission denied

每次失败的服务的名称都可以更改(这里是

recommendation
微服务)。

为了解决该问题,我尝试了以下方法,但是完全得到相同的错误

不成功的尝试

1.为
./cmd
中的所有服务授予完全权限(来自 Stackoverflow 中的这篇文章

如以下更改:

# <remaining code in Dockerfile>

USER root
RUN chmod -R 777 ./cmd/*

RUN CGO_ENABLED=0 GOOS=linux GO111MODULE=on go install -ldflags="-s -w" -mod=vendor ./cmd/...

RUN chmod -R 777 ./cmd/*

也许部分更改就足够了,但整套更改并不成功,包括

USER root
或在
RUN
命令之前和之后更改权限(按理说应该是在COPY之后)。

2.使用
sudo
运行命令:

应用试验 #1 中提到的更改后,使用

docker compose up
命令运行
sudo
。然而,同样的问题也存在。

3.将当前用户添加到 docker 组(按照这篇文章中的建议)

将当前用户添加到docker组后,我再次遇到相同的错误(我也在将用户添加到组后重新启动了系统)。

4.更改了 docker 套接字的权限(如这篇文章中的建议)

在运行

docker compose up
之前使用以下命令更改 docker 套接字的权限:

sudo chmod 666 /var/run/docker.sock

问题

现在的问题是如何解决这个问题。运行试验有什么问题吗?

linux docker go docker-compose dockerfile
1个回答
0
投票

该错误看起来不像您的

entrypoint
字段,该字段应该是容器作为主进程应该运行的内容!

exec: "./cmd/recommendation": is a directory: unknown: permission denied

这是否提供更多信息?

docker compose run recommendation ls -lhaF cmd
© www.soinside.com 2019 - 2024. All rights reserved.