Ответ об ошибке от демона: oci ошибка времени выполнения: container_linux.go - PullRequest
0 голосов
/ 12 марта 2019

У меня есть такой довольно простой Dockerfile :

FROM alpine

ADD ./service /

RUN chmod +x /service

EXPOSE 8000

ENTRYPOINT ["./service"]

С этим Dockerfile я успешно создал образ, но у меня ошибка при попытке создать контейнер.

standard_init_linux.go:178: exec user process caused "exec format error"

Эта ошибка может произойти, если что-то не так с двоичным файлом или с OS / ARCH контейнера Docker.

service - это двоичный файл приложения Golang.В моем случае приложение Golang использует CGO-пакеты.Я компилирую его на своем локальном компьютере с Windows 10. Вот моя инструкция:

  • Установка tdm-gcc .Набор компиляторов для 32- и 64-битных Windows на основе набора инструментов GNU.

  • In POWERSHELL Выполнение команд:

set GOOS=linux
set GOARCH=amd64
go build -v -o questionnaire -ldflags="-extld=$CC"

go env команда возвращает мне следующее:

set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\NNogerbek\AppData\Local\go-build
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=C:\Users\NNogerbek\go
set GOPROXY=
set GORACE=
set GOROOT=C:\Go
set GOTMPDIR=
set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64
set GCCGO=gccgo
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\NNOGER~1\AppData\Local\Temp\go-build371579938=/tmp/go-build -gno-record-gcc-switches

Где я делаю ошибку и как исправить эту проблему?


Я также пытался скомпилировать двоичный файл внутри Docker с помощью следующего Dockerfile:

FROM golang:1.11

WORKDIR /go/src/application
ADD . .


RUN go get ./...
RUN go build -o /service .

ENV PORT=8000

CMD ["/service"]

Не знаю почему, но у меня ошибка.Почему-то Docker не может импортировать пакеты проектов:

package application/database: unrecognized import path "application/database" (import path does not begin with hostname)
package application/routes: unrecognized import path "application/routes" (import path does not begin with hostname)
package application/utils: unrecognized import path "application/utils" (import path does not begin with hostname)
package application/models: unrecognized import path "application/models" (import path does not begin with hostname)
package application/controllers: unrecognized import path "application/controllers" (import path does not begin with hostname)

Кстати, структура проекта:

- application
    - database
    - routes
    - utils
    - models
    - controllers
      main.go
      Dockerfile

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Что является значением SRC_DIR и, кроме того, ./service имеет права на выполнение. Попробуйте запустить chmod +x ./service на хост-компьютере или в Dockerfile.

0 голосов
/ 13 марта 2019

Наконец, я понимаю, что компилировать linux/amd64 двоичный файл приложения Goland, использующего пакеты CGO в ОС Windows, не очень хорошая идея.Двоичный файл, который я пытался запустить в контейнере Docker, всегда вызывал ошибку standard_init_linux.go:178: exec user process caused "exec format error".Ошибка означает, что что-то не так с OS/Arch или вы используете поврежденный файл.

Наконец-то я решил скомпилировать двоичный файл внутри контейнера Docker.Мой Dockerfile выглядит так:

FROM golang:1.11

WORKDIR /go/src/application

ADD . .

RUN go get [your_dependencies]

RUN go build -o service

ENV PORT=8000

CMD ["./service"]

Надеюсь, этот пост будет вам полезен!

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