我已經閱讀了 nvm 專案的自述檔案,其中列出了我需要安裝的包,盡管我不得不將python2包修改為python3,因為在 Alpine 3.13 版本之后不推薦使用前一個包,因為 node 可以在python3包上運行。這是我的 Dockerfile,它是我.devcontainer在 Codespace 上運行的目錄的一部分:
# 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
如果還需要什么,請告訴我!謝謝你的幫助!
uj5u.com熱心網友回復:
像這樣的版本管理器nvm在很大程度上不能在 Docker 中作業。特別是,大多數運行 Docker 容器和單個RUN命令的路徑不會讀取.bashrc檔案或任何其他 shell 點檔案;因此,如果唯一添加nvm的$PATH內容是檔案中的代碼.bashrc,這就是您收到nvm: command not found錯誤的原因。
您應該能夠將 Dockerfile 的前三分之二替換為
FROM node:lts
有關映像中內容的更多詳細資訊,請參閱Docker Hubnode映像頁面。這包括 Node 解釋器本身、NPM 和 Yarn。默認node映像基于 Debian,因此如果您確實需要安裝其他軟體包(例如要運行的 Python 解釋器node-gyp),則需要使用apt-get而不是apk安裝它們。
您的 Dockerfile 將遇到其他幾個值得注意的問題。您需要COPY先將元資料打包到映像中,然后才能運行npm install;然后您需要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", "..."]Docker 會自動插入sh -c包裝器。我還跳過了有問題的行,這會將您的影像限制為僅運行恰好被解釋為 shell 腳本的命令。RUNCMDENTRYPOINT
uj5u.com熱心網友回復:
我不會將alpine基于影像用于 python/Node 應用程式,
標準 PyPI 輪子在 Alpine 上不起作用
如今,大多數 Python 包都包含 PyPI 上的二進制輪子,大大加快了安裝時間。但是,如果您使用的是 Alpine Linux,則需要編譯您使用的每個 Python 包中的所有 C 代碼。
請參閱此處您可能遇到的最終問題 https://pythonspeed.com/articles/alpine-docker-python/
更新
至于節點應用程式
見https://www.youtube.com/watch?v=mA8wtTUCdgc
你最終可以解決這個問題,然后另一個會出現,依此類推......
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/509830.html
上一篇:將BASH腳本轉換為SH腳本
下一篇:用正則運算式查找替換檔案內容
