Запуск NodeJs двоичного файла с нуля Docker изображение - PullRequest
0 голосов
/ 03 марта 2020

Мы можем конвертировать NodeJs приложений в двоичные файлы с пакетом pkg . Я хочу собрать двоичный файл и запустить его с Docker scratch образом.

index.js

const http = require('http')
http.createServer().listen(3000)

Dockerfile

FROM node:10 as build

COPY index.js .
RUN npm i pkg -g && pkg -t node10-alpine-x64 index.js

FROM scratch
COPY --from=build index /index

ENTRYPOINT ["/index"]

Когда я запускаю docker build -t index . && docker run --rm -it index, я получаю это сообщение об ошибке - standard_init_linux.go:211: exec user process caused "no such file or directory".

Чего мне не хватает?

Ответы [ 2 ]

2 голосов
/ 03 марта 2020

Я думаю, что @Isanych прав, поскольку scratch хорош для запуска двоичных файлов c ++, go, но я не нашел способа запустить исполняемый файл pkg на образе scratch, поэтому вот решение, которое основан на альпийском, но альпийский все еще нуждается в некоторой зависимости, которая упоминается здесь , и он работает с изображением ниже

Вы можете попробовать это

FROM node:10 as build
WORKDIR /app
COPY index.js .
RUN npm i pkg -g
RUN pkg -t node10-alpine-x64 index.js
FROM alpine
RUN apk add --no-cache libstdc++ libgcc
WORKDIR /app
COPY --from=build /app/ .
CMD ["./index"]

Бонус: Ваше изображение все еще ниже 50 МБ.

1 голос
/ 03 марта 2020

scratch - это пустое изображение без файлов вообще, ваш двоичный файл может иметь зависимости и ожидать определенную среду linux. Попробуйте использовать минимальные linux базовые изображения вместо нуля - alpine, debian, ubuntu.

...