docker-compose 与 golang、nginx 和 postgres 找不到 ./main

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

我正在尝试使用 3 个容器运行 docker-compose 设置:golang 应用程序(api)、postgres 和 nginx。 我为 golang 创建了 docker-compose 文件和 Dockerfile。 我尝试了不同的方法,但仍然出现错误“来自守护程序的错误响应:无法创建填充任务:OCI运行时创建失败:runc创建失败:无法启动容器进程:exec:“./main”:stat ./main :没有这样的文件或目录:来自 Dockerfile 的未知”。

RUN go build -o main .
如何在不同位置创建垃圾箱。 这是位于项目根目录下的 docker-compose 文件:

version: '3.8'

services:
  apigateway:
    build:
      context: .
      dockerfile: .docker/go/Dockerfile
    ports:
      - "8080:8080"
    volumes:
      - ./apigateway:/apigateway
    depends_on:
      - postgres
    networks:
      - app-network

  nginx:
    image: nginx:1.26.0
    ports:
      - "80:80"
    volumes:
      - ./.docker/nginx/conf.d:/etc/nginx/conf.d
    depends_on:
      - apigateway
    networks:
      - app-network
  postgres:
    image: postgres:16.2
    ports:
      - "5210:5432"
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydb
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - app-network
volumes:
  postgres_data:

networks:
  app-network:

Dockerfile 位于

.docker/go/Dockerfile
,它包含:

FROM golang:1.22-alpine

RUN apk update && apk upgrade && \
    apk add --no-cache bash openssh

WORKDIR /apigateway

COPY ./apigateway/go.mod ./apigateway/go.sum ./

RUN go mod download

COPY ./apigateway .

RUN go build -o main .

EXPOSE 8080

CMD ["./main"]

非常感谢任何帮助。

我尝试创建 bin 并将其复制以执行,但它不起作用,因为 bin 是在 macos 中内置的,无法在 linux 中执行。 我也对 Dockerfile 中的路径进行了很多尝试,但没有取得任何成功

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

Compose 文件中的

volumes:
块会使用主机中的内容覆盖图像中的所有内容。这包括编译的二进制文件:您的图像应该有一个
/apigateway/main
二进制文件,但由于整个
/apigateway
目录被绑定挂载隐藏,因此您看不到它。

您可以安全地删除

volumes:
块,然后您将使用图像中内置的二进制文件。

services:
  apigateway:
    # volumes:                      <-- delete
    #   - ./apigateway:/apigateway  <-- delete
© www.soinside.com 2019 - 2024. All rights reserved.