リモートコンテナ用のdockerイメージ(Debian11, Python3.8)の環境でnodeを使いたかったので入れた
いろんなOSさわると、遭遇するエラーもさまざま
- 入れた対象OS
root ➜ /workspaces $ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
Dockerファイルに記載してnvmとnodeをインストール(Rebuild Containerで実行して1分かからず)
-
操作しているユーザー環境変数の設定はしていない
-
apt upgrade
はしなくても良い -
node install ではビルドしない(-s 指定しない)
-
install.sh が実行されると、
/usr/local/share/nvm
に nvmが入っていることを気づかずにやっていてつまづいた -
作成したDeockerfile(https://gist.github.com/ssugimoto/acd7fe5d25b9adaf149dd3c8a3bdbf2a )、以下も同じ
FROM mcr.microsoft.com/vscode/devcontainers/python:3.8
RUN apt-get update \
&& apt-get -y install curl \
&& apt-get autoremove -y \
&& apt-get clean -y \
RUN apt-get upgrade \
&& apt-get -y install curl
ENV NVM_DIR /usr/local/share/nvm
ENV NODE_VERSION 12.22.1
#
# Install nvm with node and npm
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash \
&& . $NVM_DIR/nvm.sh \
&& nvm install $NODE_VERSION \
&& nvm alias default $NODE_VERSION \
&& nvm use default
WORKDIR /workspaces
- 入れたバージョンの確認
root ➜ /workspaces/test $
root ➜ /workspaces/test $ nvm --version
0.38.0
root ➜ /workspaces/test $ node --version
v12.22.1
root ➜ /workspaces/test $ npm --version
6.14.12
root ➜ /workspaces/test $ python --version
Python 3.8.11
エラーの対応
-
/bin/sh: nvm: not found docker
,"bash: nvm: command not found"
nvm コマンドがありません。- 手動でインストールすると発生しないけど、Dockerfileだと発生する
- RUN コマンド1行で(まとめて)記載する必要があるんだけど、1行で記載しても解決できず。
- そもそもnvmがインストールされる場所が想定と違ってた
参考
-
その1) https://zenn.dev/uttk/articles/a7b085c7774ae9
こちらでは、alpine linux
のため少し異なる。環境変数適用が違う。Ubuntuの記載がある。 -
その2)https://stackoverflow.com/questions/25899912/how-to-install-nvm-in-docker
こちらの stack overflowを参考にしました -
その3)https://gist.github.com/remarkablemark/aacf14c29b3f01d6900d13137b21db3a#file-dockerfile
こちらも 参考にしました。ディスカッションが最もあり参考になる。
debianでのDockerファイルにnvm installを記載する例、ここでも/usr/local/nvm
のパスで自身の環境とは一致しなかった
ENV NVM_DIR /usr/local/nvm
・・・
. $NVM_DIR/nvm.sh
の2つの箇所、 /usr/local/nvm にはインストールされないので変更が必要
なぜ、node用のリモートコンテナを使わないのか
- VSCodeリモートコンテナ Debian10 node12(node12または14)の環境が入っているOS Debian10ではPython3.7がインストール済で、Python3.8 を
sudo apt-get install python3.8
ではインストールできなかった - Pyhon3.8を使うには いくつかの xxx-devライブラリを入れ、 make altinstall する必要があり、コンテナが使えるまでの時間が長すぎた
Dockerファイルに書かないで、通常のインストール
- ほぼ、以下のコマンド入る(sudo ついてるけど、rootで作業しています)
# sudo apt update
# sudo apt upgrade
# sudo apt-get install curl
nvm のインストール
# curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash
# nvm --version
# nvm install v12.22.1
コンテナビルドに続いて Amplif cli 入れたら3分くらいかかった(176sec)
devcontainer.json に
"postCreateCommand": "npm install -g @aws-amplify/cli@5.3.1",
を追記した場合に、npm install が3分かかった
npm install ログの最後
+ @aws-amplify/cli@5.3.1
added 1404 packages from 775 contributors in 176.666s