我已经阅读了nvm项目的自述文件,其中列出了我需要安装的包,尽管我不得不将python2包修改为python3,因为前一个包是在Alpin3.13发布之后被废弃的,因为节点可以在python3包上运行。下面是我的Dockerfile,它是我在Codespace上运行的.devcontainer目录的一部分:
# Pull the Alpine 3.15 Docker image
FROM alpine:3.16
# Enter the BASH shell
ENTRYPOINT [ "/bin/bash" ]
# Add packages without caching, but while upgrading Alpine
RUN apk add --no-cache -U\
curl bash ca-certificates\
openssl ncurses coreutils\
python3 make gcc g++\
libgcc linux-headers grep\
util-linux binutils findutils
RUN touch ~/.bashrc
# Install NVM and source it
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
RUN echo '\
export NVM_DIR="~/.nvm" \
[-s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" \
[[ -r $NVM_DIR/bash_completion ]] && \. $NVM_DIR/bash_completion\
' >~/.bashrc
# Run the usual setup NVM commands
RUN [ "/bin/bash", "-c", "nvm install -s --lts --latest-npm" ]
RUN [ "/bin/bash", "-c", "nvm alias default lts/*" ]
# Install NPM packages and run the dev server
RUN [ "/bin/bash", "-c", "npm i" ]
CMD [ "/bin/bash", "-c", "npm run dev" ]下面是我的creation.log文件中的一行,它表示错误:
2022-09-27 14:44:57.546Z: #9 [6/8] RUN [ "/bin/bash", "-c", "nvm install -s --lts --latest-npm" ]
2022-09-27 14:44:58.134Z: #9 0.539 /bin/bash: line 1: nvm: command not found
2022-09-27 14:44:58.229Z: #9 ERROR: executor failed running [/bin/bash -c nvm install -s --lts --latest-npm]: exit code: 127如果还需要什么,请告诉我!谢谢你的帮助!
发布于 2022-09-29 14:51:31
# Pull the Alpine 3.15 Docker image
FROM alpine:3.15
# Set the entrypoint to the `ASH` shell
ENTRYPOINT ["/bin/ash"]
# Add the needed packages without caching, but upgrading Alpine
RUN apk add --no-cache -U npm nodejs sudo git
RUN git config --global user.email lukasbatema@gmail.com
RUN git config --global user.name BatemaDevelopment
# Add the `node` group and user, then assign the user to the group
RUN addgroup -S node && adduser -S node -G node
# Make the directory and subdirectories `/home/node/acoustic-docs/node_modules`
# and change ownership recursivly to the `node` user and group
RUN mkdir -p /home/node/acoustic-docs/node_modules && chown -R node:node /home/node/acoustic-docs
# Make the required directories for the docs
RUN mkdir -p /home/node/acoustic-docs/blog && chown -R node:node /home/node/acoustic-docs/blog
RUN mkdir -p /home/node/acoustic-docs/Buttons && chown -R node:node /home/node/acoustic-docs/Buttons
RUN mkdir -p /home/node/acoustic-docs/docs && chown -R node:node /home/node/acoustic-docs/docs
RUN mkdir -p /home/node/acoustic-docs/src && chown -R node:node /home/node/acoustic-docs/src
RUN mkdir -p /home/node/acoustic-docs/static && chown -R node:node /home/node/acoustic-docs/static
# Set the working directory to `/home/node/acoustic-docs`
WORKDIR /home/node/acoustic-docs
COPY --chown=node:node . .
CMD [ "npm", "run dev" ]发布于 2022-09-27 23:54:48
像nvm这样的版本管理器很大程度上不适用于Docker。特别是,大多数运行Docker容器和单独RUN命令的路径都不读取.bashrc文件或任何其他shell dotfile;因此,如果向$PATH添加nvm的唯一方法是.bashrc文件中的代码,这就是为什么要获得nvm: command not found错误。
您应该能够将Dockerfile的前三分之二替换为
FROM node:lts有关图像中的更多细节,请参见Docker Hub node image page。这包括Node解释器本身、NPM和Yarn。默认的node映像基于Debian,因此如果您确实需要安装其他包(比如运行node-gyp的Python解释器),那么您需要使用apt-get而不是apk来安装它们。
您的Dockerfile将遇到其他一些值得注意的问题。在运行COPY之前,您需要将包元数据放入映像中;然后,在运行应用程序本身之前,需要将应用程序代码放在COPY中。更正后的Dockerfile应该更像
FROM node:lts
# RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y ...
WORKDIR /app # don't install into filesystem root
COPY package.json package-lock.json ./
RUN npm i # or npm ci
COPY ./ ./ # make sure node_modules is in .dockerignore
CMD npm run dev # or something that doesn't run a dev server我避免了RUN ["sh", "-c", "..."]语法:如果RUN或CMD是一个空字符串,Docker会自动插入RUN包装器。我还跳过了有问题的ENTRYPOINT行,它将您的映像限制为只运行碰巧被解释为shell脚本的命令。
发布于 2022-09-27 16:54:23
我不会在python/Node应用程序中使用基于alpine的图像,
标准PyPI车轮在高山上不起作用
现在大多数Python包都包含了PyPI上的二进制文件,大大加快了安装时间。但是,如果您使用的是阿尔卑斯Linux,则需要在您使用的每个Python包中编译所有C代码。
请参见这里的最终问题,您可以使用https://pythonspeed.com/articles/alpine-docker-python/
更新
至于Node应用程序
请参阅https://www.youtube.com/watch?v=mA8wtTUCdgc
你可以解决这个问题,然后另一个会出现,等等.
https://stackoverflow.com/questions/73869723
复制相似问题