0

Dockerfile:

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" ]

码头工人构建日志:

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

如何解决这个问题?

4

1 回答 1

1

不知道这是怎么回事。我显然没有您的应用程序,但我尝试对公共模块(例如newman)进行 npm 安装,但遇到了同样的错误。查看该图像的dockerhub 页面,我找到了Dockerfile - 它似乎卸载了 npm。事实上,当我直接运行该 dockerfile 时,没有 npm - 所以我不确定公共映像如何仍然拥有它,除非他们的构建过程目前有点中断。

作为旁注,这样做有点低效:

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

相反,您应该同时安装 bash 和 curl:

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 nodejs@edge bash curl \
  && rm -rf /var/cache/apk/*

RUN npm install -g newman

这似乎工作正常。

于 2016-06-30T08:24:50.490 回答