前提・実現したいこと
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/
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。