【问题标题】:starting container process caused: exec: "air": executable file not found [duplicate]启动容器进程导致:exec:“air”:找不到可执行文件[重复]
【发布时间】:2021-11-10 15:46:56
【问题描述】:

我是 docker 新手。我正在尝试使用 docker-compose 将我的 Go 应用程序容器化。 使用的技术 Golang、Docker 20.10.8 和 Air(用于实时重新加载)。 我的 Dockerfile 看起来像这样。

FROM base as dev


WORKDIR /opt/app/api

RUN apk update
RUN apk add git gcc musl-dev
RUN apk add curl

RUN curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin

# RUN go get
# RUN go mod tidy

CMD ["air"]

我的 docker-compose.yml 是这个。

version: "3.9"
services:
  app:
    build:
      dockerfile: Dockerfile.local
      context: .
      target: dev
    container_name: 'server'
    volumes:
      - .:/opt/app/api
    env_file:
      - .env      
    ports:
      - "8080:8080"
    restart:
      always    
    depends_on:
      - db
      - rabbitmq
  
  db:
    image: postgres:13-alpine
    volumes:
      - data:/var/lib/postgresql/data
    container_name: 'postgres'
    ports:
      - 5432:5432
    environment:
      POSTGRES_DB: postgres
      POSTGRES_USER: postgres
      POSTGRES_HOST_AUTH_METHOD: trust
      POSTGRES_PASSWORD: postgres
  
  rabbitmq:
    image: rabbitmq:3-management-alpine
    container_name: 'rabbitmq'
    ports:
      - 5672:5672
      - 15672:15672
    volumes:
        - rabbitmq:/var/lib/rabbitmq
        - rabbitmq-log:/var/log/rabbitmq
  
  migrate: &basemigrate
    profiles: ["tools"]
    image: migrate/migrate
    entrypoint: "migrate -database postgresql://thursday:postgres@db/postgres?sslmode=disable -path /tmp/migrations"
    command: up
    depends_on:
      - db
    volumes:
    - ./migrations:/tmp/migrations
  
  create-migration:
    <<: *basemigrate
    entrypoint: migrate create -dir /tmp/migrations -ext sql
    command: ""
    depends_on:
      - db
  
  down-migration:
    <<: *basemigrate
    entrypoint: migrate -database postgresql://thursday:postgres@db/postgres?sslmode=disable -path /tmp/migrations
    command: down
    depends_on:
      - db
          
volumes: 
  data:
  rabbitmq:
  rabbitmq-log:
      

在运行命令 sudo docker-compose up -d 我收到以下错误

来自守护程序的错误响应:OCI 运行时创建失败:container_linux.go:380:启动容器进程导致:exec:“air”:$PATH 中找不到可执行文件:未知

【问题讨论】:

  • 错误很明显executable file not found.
  • base 图像是什么样的? GOPATH 环境变量设置为什么?

标签: docker go docker-compose air


【解决方案1】:

如“docker: executable file not found in $PATH”中所述:

当您对命令使用 exec 格式(在您的情况下:CMD ["air"],一个带双引号的 JSON 数组)时,它将在没有 shell 的情况下执行。
这意味着大多数环境变量将不存在。

CMD air 应该可以工作,前提是:

  • air 是一个可执行文件 (chmod 755)
  • air 被交叉编译到 Linux(除非您运行 docker 的主机已经是 Linux)

【讨论】:

    猜你喜欢
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多