Проблема при сборке Dockerfile
Подскажите, правильно ли я составил алгоритм работы Dockerfile? Так как при попытке собрать образ выдает ошибку
> [5/8] RUN cd C:gobot1cmdpredicter:
#9 0.479 /bin/sh: 1: cd: can't cd to C:gobot1cmdpredicter
executor failed running [/bin/sh -c cd C:\go\bot1\cmd\predicter]: exit code: 2
Вот полный код докера:
FROM golang:1.15
COPY . /bot1/
WORKDIR /bot1/
RUN go mod download
RUN cd C:\go\bot1\cmd\predicter
RUN go build main.go
RUN cd C:\go\bot1\cmd\predicter
RUN start main.exe
Логика такова, копируется директория с файлами проекта, компилируется программа, а затем запускается скомпилированный ехе-шник
Ответы (1 шт):
Автор решения: Senior Pomidor
→ Ссылка
внутри докерфайла единственный доступ к вашей машине только через COPY или ADD
FROM golang:1.15
COPY . /bot1/
WORKDIR /bot1/
RUN go mod download
RUN go build -o /bot1/api main.go
CMD "/bot1/api"
EXPOSE 8080
теперь по-порядку.
COPY . /bot1- копировать все из контекста в папку bot1 ВНУТРИ контейнераWORKDIR /bot1/- теперь следующие команды будут выполнены из этой папкиRUN go mod download- скачать зависимостиRUN go build -o /bot1/api main.go-сбилдить банар. -o означает -output, путь, где появится сбилженный бинарьCMD "/bot1/api"если кто-то запустит конфейнер, то пусть эта программа запуститсяEXPOSE 8080- инструкция EXPOSE полезна для проброса портов между контейнерами. Я хочу, чтобы 8080 порт ВНУТРИ контейнера пробросился наружу
выполняем команду
docker build -t myname .
myname- это название image-а, который получится в тоге.- контекст, то есть откуда брать файлы. Обычно, Dockerfile лежит рядом с репозиторием, но если это не так, то вы вместо.укажите полный путь до сорсов
как только сбилдили командой выше, то можно посмотреть на нее
➜ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myname latest 132b6842aac9 1 hours ago 815MB
теперь можете запустить ваш контейнер docker run myname
контейнер и обораз(image) - разныке вещи. вы собираете образ, чтобы потом из него сделать контейнер.