我正在尝试使用 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 中的路径进行了很多尝试,但没有取得任何成功
Compose 文件中的
volumes:
块会使用主机中的内容覆盖图像中的所有内容。这包括编译的二进制文件:您的图像应该有一个 /apigateway/main
二进制文件,但由于整个 /apigateway
目录被绑定挂载隐藏,因此您看不到它。
您可以安全地删除
volumes:
块,然后您将使用图像中内置的二进制文件。
services:
apigateway:
# volumes: <-- delete
# - ./apigateway:/apigateway <-- delete