質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

2149閲覧

npm -Vを実行するとエラー表示”env: can't execute 'node': No such file or directory”

S.Nakagawa255

総合スコア20

npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/08/15 00:29

前提・実現したいこと

Dockerを使ったWebシステム構築の練習のため、Linux+Nginx+PostgreSQL+PHP(F/W:Laravel)の構築をしています。

各コンテナのビルドと実行までは動作確認できました。
しかしアプリケーションコンテナ(php)のnpmがOS側で認識されません。
アプリケーションコンテナ上でnpmを実行しVueコンポーネントをインストールしようとしています。

環境

  • Windows10 Pro
  • Docker for Windows
  • nginx:1.18-alpine
  • php:7.4.1-fpm-alpine(laravel 6.20.1)
  • postgres:13.3-alpine3.14

発生している問題・エラーメッセージ

docker compose buildが完了し、laravelトップページまで表示できました。
そのあとnpm -vを実行したところ、 env: can't execute 'node': No such file or directory が表示されました。
docker/php/Dockerfileにてインストールコマンドを実行しており、コンテナに入って該当ディレクトリを見てもnode関係のファイルは存在していたので、npmのインストールは正常に完了した認識です。

yml

1COPY --from=node:10.22 /usr/local/bin /usr/local/bin 2COPY --from=node:10.22 /usr/local/lib /usr/local/lib

該当のソースコード

ディレクトリ構成

<PRJ_ROOT> │ .env │ .gitignore │ docker-compose.yml ├─docker │ ├─nginx │ │ default.conf │ │ Dockerfile │ ├─php │ │ Dockerfile │ │ php.ini │ └─postgresql │ Dockerfile └─src

.env

WEB_PORT=8080 DB_PORT=5432 DB_NAME=pgdb DB_USER=root DB_PASSWORD=<パスワード> DB_ROOT_PASSWORD=<パスワード2>

docker-compose.yml

yml

1version: '3.8' 2 3services: 4 web: 5 build: 6 context: . 7 dockerfile: ./docker/nginx/Dockerfile 8 ports: 9 - ${WEB_PORT}:80 10 depends_on: 11 - app 12 volumes: 13 - ./src/:/var/www/html 14 app: 15 build: 16 context: . 17 dockerfile: ./docker/php/Dockerfile 18 volumes: 19 - ./src/:/var/www/html 20 environment: 21 - DB_PASSWORD=${DB_PASSWORD} 22 - DB_CONNECTION=postgresql 23 - DB_HOST=db 24 - DB_PORT=${DB_PORT} 25 - DB_DATABASE=${DB_NAME} 26 - DB_USERNAME=${DB_USER} 27 db: 28 build: 29 context: . 30 dockerfile: ./docker/postgresql/Dockerfile 31 ports: 32 # container port : host port 33 - ${DB_PORT}:5432 34 environment: 35 # Required 36 - POSTGRES_PASSWORD=${DB_PASSWORD} 37 # Optional 38 - POSTGRES_DB=${DB_NAME} 39 - PGDATA=/var/lib/postgresql/pgdata 40 volumes: 41 - postgresql-vol:/var/lib/postgresql/pgdata 42volumes: 43 postgresql-vol:

docker/nginx/Dockerfile

yml

1FROM nginx:1.18-alpine 2ENV TZ=UTC 3COPY ./docker/nginx/*.conf /etc/nginx/conf.d/ 4WORKDIR /var/www/html

docker/nginx/default.conf
こちらをそのままコピー

docker/php/Dockerfile

yml

1FROM php:7.4.1-fpm-alpine 2COPY ./docker/php/php.ini /usr/local/etc/php/php.ini 3 4# composerのインストールはマルチステージビルドを採用 5COPY --from=composer:2.0 /usr/bin/composer /usr/bin/composer 6 7# install Node.js, マルチステージビルドを採用 8COPY --from=node:10.22 /usr/local/bin /usr/local/bin 9COPY --from=node:10.22 /usr/local/lib /usr/local/lib 10 11RUN apk update && apk add zip unzip 12RUN apk add postgresql-dev 13RUN docker-php-ext-install pdo pdo_pgsql 14 15# phpコンテナに入ったときの作業ディレクトリ 16WORKDIR /var/www/html

docker/php/php.ini

INI

1[Date] 2date.timezone="Asia/Tokyo" 3[mbstring] 4mbstring.internal_encoding="UTF-8" 5mbstring.language="Japanese"

docker/postgresql/Dockerfile

yml

1FROM postgres:13.3-alpine3.14 2ENV TZ=UTC

試したこと

以下のコマンドを実行しました。

Terminal

1//--- PowerShell 2PS > docker compose build 3PS > docker compose up -d 4PS > docker compose exec app ash 5//--- app container 6/var/www/html # composer create-project --prefer-dist "laravel/laravel=6.*" . 7// ローカルディレクトリの./srcフォルダにlaravelプロジェクトファイルが生成される。 8// Laravelのウェルカムページ表示のためのコマンド 9/var/www/html # cd storage 10/var/www/html/storage # chown -R www-data storage/ 11/var/www/html # cd .. 12// npmのバージョン確認 13/var/www/html # npm -v 14env: can't execute 'node': No such file or directory 15/var/www/html # npm install -D vue 16env: can't execute 'node': No such file or directory

補足情報(FW/ツールのバージョンなど)

参考にしたページ
https://lightning-shine.com/post1437/
https://yutaro-blog.net/2021/04/28/docker-laravel-vuejs-1/
https://yutaro-blog.net/2021/04/29/docker-laravel-vuejs-2/
https://yutaro-blog.net/2021/04/30/docker-laravel-vuejs-3/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

原因:
0. 元にしたnodejsイメージがalpine用ではなかった(と思う)
0. Node.jsはC++のためコンパイル用にg++、libstd++、実行用にランタイムlibgccが必要だった

参考サイト:
DockerのPHP + Node.jsマルチビルドでsymbol not found

docker/php/Dockerfile

yml

1FROM php:7.4.1-fpm-alpine 2 3COPY ./docker/php/php.ini /usr/local/etc/php/php.ini 4 5COPY --from=composer:2.0 /usr/bin/composer /usr/bin/composer 6 7RUN apk update && apk add zip unzip curl bash 8 9# 【解決ポイント】Node.jsはC++のためコンパイル用にg++、libstd++、実行用にランタイムlibgccが必要だった 10RUN apk add --no-cache --virtual g++ 11RUN apk add --no-cache libstdc++ && apk add --no-cache libgcc 12 13# 【C++関連Pkgの後に移動】install Node.js(Alpine用), マルチステージビルドを採用 14COPY --from=node:10.22-alpine /usr/local/bin /usr/local/bin 15COPY --from=node:10.22-alpine /usr/local/lib /usr/local/lib 16 17RUN apk add postgresql-dev 18 19RUN docker-php-ext-install pdo pdo_pgsql 20 21WORKDIR /var/www/html

投稿2021/08/15 15:42

S.Nakagawa255

総合スコア20

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こちら類似事象に見えます。
元々インストールされている node と npm が悪さをしており、これらを削除してから再インストールすると解決したようです。

ご参考になれば幸いです。

投稿2021/08/15 01:24

編集2021/08/15 02:03
atomis

総合スコア283

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

S.Nakagawa255

2021/08/15 07:14

ご回答ありがとうございました。 類似事象を参考に再インストールしてみたのですが、`Error relocating /usr/bin/node: nghttp2_option_set_max_settings: symbol not found`という違うエラーが発生し、そちらを調べているところです。 ただ、Docker Hubで配布されているPHPコンテナイメージなのに、ここまで障害があるのはちょっと腑に落ちないのですが。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問