Не могу сбилдить приложение в контейнер написанное на Golang. Не видит скомпилированный файл main
Я новичок в docker и пытаюсь сбилдить приложение написанное на golang в контейнер, но по непонятным мне причинам в конце сборки возникаем ошибка: "Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "./main": stat ./main: no such file or directory: unknown"
- я проверял структуру файлов в контейнере и там он есть:
docker run -it messanger_server ls -l /app
Также проверял права на выполнение chmod +x ./main
.
Пример Dockerfile:
FROM golang:1.22-alpine
RUN apk add --no-cache git
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o main ./cmd/server/
CMD ["./main"]
В /cmd/server/ находится main.go
Пример куска кода Docker-compose.yml:
version: '3.8'
services:
server:
build: .
ports:
- "8080:8080"
volumes:
- .:/app
depends_on:
- redis
- postgres
Подскажите в чём может быть проблема?
Ответы (1 шт):
Проблема решена.
Если вдруг кто-то столкнётся с похожим: проблема была из-за наличия блока volumes
в файле docker-compose.yml
. Он перезаписывает всё в образе содержимым с хоста, в том числе скомпилированный бинарный файл. Чтобы решить проблему, нужно удалить этот блок.