🐳
DockerでNext.jsの環境を構築とエラー対策
Docker開発環境セットアップガイド
このドキュメントでは、Next.jsプロジェクトのDocker開発環境構築手順と、発生する可能性のある問題の解決方法について説明します。
1. 必要なファイルの作成
Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
EXPOSE 3000
CMD ["npm", "run", "dev"]
docker-compose.yml
services:
web:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
- /app/node_modules
environment:
- NODE_ENV=development
- CHOKIDAR_USEPOLLING=true
stdin_open: true
.dockerignore
node_modules
.next
.git
.github
*.md
.gitignore
.dockerignore
Dockerfile
docker-compose.yml
2. Docker Desktopのインストール
- Docker Desktopの公式サイトからインストーラーをダウンロード
- インストーラーを実行し、指示に従ってインストール
- インストール完了後、Docker Desktopを起動
3. Docker環境の起動
プロジェクトのルートディレクトリで以下のコマンドを実行:
docker compose up --build
初回ビルド後は、以下のコマンドでも起動可能:
docker compose up
バックグラウンドで実行する場合:
docker compose up -d
4. アプリケーションへのアクセス
ブラウザで以下のURLにアクセス:
http://localhost:3000
5. Docker環境の停止
以下のコマンドでコンテナを停止:
docker compose down
6. よくある問題と解決方法
version
属性の非推奨警告
6.1 問題:
WARN[0000] /path/to/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
解決策:
docker-compose.ymlからversion: '3'
の行を削除してください。最新のDocker Composeではバージョン属性は自動的に処理されます。
6.2 Docker Desktopのエラー
問題:
Docker Desktop encountered an unexpected error and needs to close.
running engine: waiting for the Docker API: context deadline exceeded
解決策:
-
Docker Desktopの再起動:
- Docker Desktopを完全に終了
- コンピュータを再起動
- Docker Desktopを再起動
-
設定のリセット:
- Docker Desktopの「Troubleshoot」から「Reset to factory defaults」を選択
-
ディスクスペースの確認:
df -h
-
Dockerキャッシュのクリア:
rm -rf ~/Library/Containers/com.docker.docker/Data/vms/* rm -rf ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
-
Docker Desktopの再インストール:
- Docker Desktopをアンインストール
- Docker関連ディレクトリを削除:
rm -rf ~/.docker rm -rf ~/Library/Group\ Containers/group.com.docker rm -rf ~/Library/Containers/com.docker.docker
- 最新版を再インストール
6.3 nodenvコマンドが見つからないエラー
問題:
/Users/username/.zprofile:1: command not found: nodenv
解決策:
-
Homebrewを使用してnodenvをインストール:
brew install nodenv
-
シェル設定ファイルに初期化スクリプトを追加:
echo 'eval "$(nodenv init -)"' >> ~/.zshrc
または
echo 'eval "$(nodenv init -)"' >> ~/.zprofile
-
シェルを再起動するか、設定を再読み込み:
source ~/.zshrc
または
source ~/.zprofile
7. その他の便利なコマンド
コンテナのログを確認
docker compose logs -f
コンテナ内でコマンドを実行
docker compose exec web npm install パッケージ名
コンテナ内のシェルにアクセス
docker compose exec web /bin/sh
Dockerイメージとコンテナのクリーンアップ
未使用のコンテナを削除:
docker container prune
未使用のイメージを削除:
docker image prune
すべての未使用リソースを削除:
docker system prune
8. 開発の利点
- ホストとコンテナ間のボリュームマウントにより、ソースコード変更がリアルタイムで反映される
- 開発環境が標準化され、「自分の環境では動く」問題を解消
- node_modulesはコンテナ内に保持されるため、ホスト環境を汚さない
- チーム内で同一の開発環境を共有できる
9. 環境構築時のpackage.json
{
"name": "任意の名前",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"browserslist": "defaults, not ie <= 11",
"dependencies": {
"@headlessui/react": "^2.1.0",
"@tailwindcss/forms": "^0.5.3",
"@tailwindcss/postcss": "^4.0.6",
"clsx": "^2.1.0",
"next": "^14.0.4",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"tailwindcss": "^4.0.6"
},
"devDependencies": {
"eslint": "^8.56.0",
"eslint-config-next": "^14.0.4",
"prettier": "^3.3.2",
"prettier-plugin-tailwindcss": "^0.6.10",
"sharp": "0.33.1"
}
}
10 開発環境構築時next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {}
module.exports = nextConfig
Discussion