2016-06-29 2 views
0

Dockerfile:Странные ошибки при запуске НПМ установки на альпийской Linux

FROM iron/node 
RUN apk add --update bash && rm -rf /var/cache/apk/* 
RUN apk add --update curl && rm -rf /var/cache/apk/* 
WORKDIR /usr/src/app 
COPY . /usr/src/app 
RUN npm install 
CMD [ "node", "index.js" ] 

Docker журнал сборки:

Sending build context to Docker daemon 198.2 MB 
Step 1 : FROM iron/node 
---> 9ca501065d18 
Step 2 : RUN apk add --update bash && rm -rf /var/cache/apk/* 
---> Using cache 
---> 0a03d023f33e 
Step 3 : RUN apk add --update curl && rm -rf /var/cache/apk/* 
---> Using cache 
---> 3e0176dae102 
Step 4 : WORKDIR /usr/src/app 
---> Using cache 
---> 3f9d925bd76c 
Step 5 : COPY . /usr/src/app 
---> 0c2c195505dd 
Removing intermediate container de7cb9edede2 
Step 6 : RUN npm install 
---> Running in d7549ec2707d 
Error relocating /usr/bin/node: uv_os_free_passwd: symbol not found 
Error relocating /usr/bin/node: uv_os_get_passwd: symbol not found 
The command '/bin/sh -c npm install' returned a non-zero code: 127 

Что происходит? Что означают эти ошибки ?:

Error relocating /usr/bin/node: uv_os_free_passwd: symbol not found 
Error relocating /usr/bin/node: uv_os_get_passwd: symbol not found 

Как это исправить?

ответ

1

Не уверен, что с этим происходит. У меня, очевидно, нет вашего приложения, но я попытался сделать npm-установку открытого модуля (например, newman), и я попал в ту же ошибку. Глядя на dockerhub page для этого изображения, я нашел Dockerfile - который, кажется, удаляет npm. В самом деле, когда я запускал этот файл docker напрямую, не было npm - поэтому я не уверен, как у общего образа все еще есть его, если каким-то образом их процесс сборки в данный момент не работает.

Как примечание стороны, это немного неэффективен, чтобы сделать это:

RUN apk add --update bash && rm -rf /var/cache/apk/* 
RUN apk add --update curl && rm -rf /var/cache/apk/* 

Вместо этого, вы должны установить Баш и завиток в то же время:

RUN apk add --update bash curl && rm -rf /var/cache/apk/* 

Объединяя все эти шаги (т.е. используя непосредственно файл dockerfile и объединяя установки apk), и не удаляя npm, дает мне:

FROM iron/base:edge 

RUN echo '@edge http://nl.alpinelinux.org/alpine/edge/main' >> /etc/apk/repositories 
# RUN echo '@community http://nl.alpinelinux.org/alpine/edge/community' >> /etc/apk/repositories 

RUN apk update && apk upgrade \ 
    && apk add [email protected] bash curl \ 
    && rm -rf /var/cache/apk/* 

RUN npm install -g newman 

Казалось, все нормально.

Смежные вопросы