Беги иди собирай main.go в dockerfile - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь запустить go build hello.go внутри файла docker, как

FROM golang

COPY hello.go /go/src/hello.go

RUN cd src/

RUN go build hello.go

RUN ./hello

Все идет хорошо до команды go build, затем появляется следующее сообщение об ошибке:

stat hello.go: no such file or directory
The command '/bin/sh -c go build hello.go' returned a non-zero code: 1

Однако, если я прокомментирую последние две команды в файле docker и запусту созданный образ, я могу без проблем выполнить команду go build.

Почему это происходит?

1 Ответ

0 голосов
/ 20 декабря 2018

Каждая команда RUN запускает новую оболочку с чистой средой и новым рабочим каталогом по умолчанию.В частности, RUN cd ... как изолированный шаг ничего не делает.

Если вам действительно нужно изменить каталоги в Dockerfile, либо объедините два шага в один, либо используйте WORKDIRдиректива, чтобы сделать изменение более глобальным.

В конкретном случае хранилища Go, поскольку есть стандартная структура каталогов , которая, по крайней мере, очень сильно поощряется, я бы поработал с ней:

FROM golang
WORKDIR /go/src/github.com/me/myprogram
COPY . ./
RUN go install .
CMD ["/go/bin/myprogram"]

(В общем, Go имеет дело с целыми каталогами или «пакетами» связанных файлов, а не обязательно с отдельными .go файлами.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...