当前位置: 首页 > 知识库问答 >
问题:

启动容器进程导致:exec:“air”:未找到可执行文件[重复]

罗睿识
2023-03-14

我是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撰写。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中找不到可执行文件:未知

共有1个答案

钦英发
2023-03-14

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

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

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

  • air是一个可执行文件(chmod 755
  • air被交叉编译为Linux(除非运行docker的主机已经Linux)
 类似资料: