- 技術 💻
Dockerコマンド早見表|よく使う操作とつながらない時の対処
Dockerの日常的な操作は、「起動する(run・compose up)」「状態を見る(ps・logs)」「中に入る(exec)」「止めて消す(stop・rm・compose down)」「後片付けする(prune)」の5つを覚えれば、ほとんどカバーできます。
この記事では、よく使うコマンドを用途別の早見表にまとめたうえで、docker run のオプションの意味、そしてDockerを使い始めた人がつまずきやすい「localhostにつながらない」「コンテナがすぐ終了する」「変更が反映されない」「容量が減らない」といったトラブルの切り分け方までを解説します。
まず押さえる3つの用語
| 用語 | 意味 | たとえ |
|---|---|---|
| イメージ | アプリと実行環境をまとめた、読み取り専用のひな形 | 設計図・料理のレシピ |
| コンテナ | イメージから起動した、実行中(または停止中)の環境 | 設計図から建てた家・作った料理 |
| ボリューム | コンテナを消しても残る、データの保存場所 | 家の外にある倉庫 |
コンテナを削除すると、コンテナの中で作ったファイルは消えます。データベースのデータのように残したいものは、ボリュームに保存します。
コンテナの操作
| やりたいこと | コマンド |
|---|---|
| コンテナを起動する | docker run -d -p 8080:80 --name web nginx |
| 起動中のコンテナを一覧表示 | docker ps |
| 停止中も含めて一覧表示 | docker ps -a |
| ログを見る | docker logs web |
| ログを追いかけて表示する | docker logs -f web |
| コンテナの中に入る | docker exec -it web bash(bashがなければ sh) |
| コンテナの中でコマンドを1回だけ実行 | docker exec web ls /usr/share/nginx/html |
| 停止する | docker stop web |
| 開始する(停止中のもの) | docker start web |
| 再起動する | docker restart web |
| 削除する | docker rm web(起動中は docker rm -f web) |
| ファイルをコピーする | docker cp web:/etc/nginx/nginx.conf ./ |
| CPU・メモリの使用量を見る | docker stats |
| 詳細な設定を見る | docker inspect web |
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Dockerコマンド早見表|よく使う操作とつながらない時の対処」
docker run のよく使うオプション
docker run -d --rm --name api \
-p 3000:3000 \
-e NODE_ENV=development \
--env-file .env \
-v "$(pwd)":/app \
-w /app \
node:22 npm run dev
| オプション | 意味 |
|---|---|
-d |
バックグラウンドで起動する |
-it |
対話的に操作する(コンテナのシェルを使うとき) |
--rm |
停止したら自動で削除する(使い捨てのコンテナに) |
--name |
コンテナに名前を付ける(付けないとランダムな名前になる) |
-p ホスト:コンテナ |
ポートをつなぐ。-p 8080:80 はパソコンの8080番をコンテナの80番へ |
-e 名前=値 |
環境変数を渡す |
--env-file |
ファイルから環境変数をまとめて渡す |
-v ホスト:コンテナ |
フォルダやボリュームをコンテナにつなぐ |
-w |
コンテナ内の作業ディレクトリ |
--platform |
CPUの種類を指定する(例:linux/amd64) |
-p は「パソコン側:コンテナ側」の順です。逆に書いてつながらない、というのはよくある間違いです。
イメージの操作
| やりたいこと | コマンド |
|---|---|
| イメージを一覧表示 | docker images |
| イメージを取得する | docker pull postgres:16 |
| Dockerfileからイメージを作る | docker build -t my-app:1.0 . |
| キャッシュを使わずに作り直す | docker build --no-cache -t my-app:1.0 . |
| イメージを削除する | docker rmi my-app:1.0 |
| レジストリに送る | docker push my-registry/my-app:1.0 |
イメージのタグ(:16 や :1.0)を省略すると latest になります。latest は「最新版」という意味ではなく、単なる名前で、いつ取得したかによって中身が変わります。チームや本番環境では、バージョンを明示するのが安全です。
Docker Composeの操作
複数のコンテナ(アプリ・データベース・キャッシュなど)をまとめて扱うのがDocker Composeです。現在は docker compose(ハイフンなし)が標準で、古い docker-compose コマンドはサポートが終了しています。
| やりたいこと | コマンド |
|---|---|
| まとめて起動する | docker compose up -d |
| イメージを作り直して起動する | docker compose up -d --build |
| 状態を確認する | docker compose ps |
| ログを見る(全サービス) | docker compose logs -f |
| 特定のサービスのログを見る | docker compose logs -f app |
| サービスの中に入る | docker compose exec app bash |
| 使い捨てのコンテナでコマンドを実行 | docker compose run --rm app npm test |
| 特定のサービスだけ再起動 | docker compose restart app |
| 停止して削除する | docker compose down |
| ボリュームも含めて削除する | docker compose down -v |
| 設定ファイルの最終形を確認する | docker compose config |
docker compose down -v は、データベースのデータが入ったボリュームも削除します。開発用のデータを初期化したいとき以外は、-v を付けないよう注意してください。
ボリューム・ネットワークの操作
| やりたいこと | コマンド |
|---|---|
| ボリュームを一覧表示 | docker volume ls |
| ボリュームの詳細を見る | docker volume inspect ボリューム名 |
| ボリュームを削除する | docker volume rm ボリューム名 |
| ネットワークを一覧表示 | docker network ls |
| ネットワークの詳細を見る | docker network inspect ネットワーク名 |
後片付け:容量を空ける
Dockerを使い続けると、停止したコンテナ、使われなくなったイメージ、ビルドのキャッシュがたまり、数十GBの容量を使うこともあります。
| やりたいこと | コマンド |
|---|---|
| Dockerの使用容量を確認 | docker system df |
| 停止中のコンテナを削除 | docker container prune |
| タグのない不要なイメージを削除 | docker image prune |
| 使われていないイメージをすべて削除 | docker image prune -a |
| ビルドのキャッシュを削除 | docker builder prune |
| まとめて削除(ボリュームは除く) | docker system prune |
| 使われていないボリュームを削除 | docker volume prune |
ボリュームの削除は、データの削除です。docker volume prune や docker system prune --volumes は、中身を確認してから実行します。
Docker Desktopを使っている場合、コマンドで削除しても、パソコン側の仮想ディスクのファイルサイズがすぐには小さくならないことがあります。Docker Desktopの設定画面で、ディスクの使用状況を確認してください。
つながらない・動かないときの切り分け
localhostにつながらない
ブラウザで http://localhost:8080 を開いても表示されない場合は、次の順に確認します。
▶ 1. コンテナは起動しているか
docker ps -a
STATUSが Exited なら、コンテナは停止しています。次の「すぐ終了する」を確認します。
▶ 2. ポートはつながっているか
docker ps の PORTS 列に 0.0.0.0:8080->80/tcp のように表示されているかを確認します。何も表示されない場合は、-p(composeなら ports:)の指定がありません。
▶ 3. アプリが「0.0.0.0」で待ち受けているか
最も見落としやすいポイントです。コンテナの中のアプリが 127.0.0.1(localhost)で待ち受けていると、コンテナの外からは接続できません。
| ツール | コンテナ内で外部からの接続を受ける設定 |
|---|---|
| Vite | vite --host または server.host: true |
| Next.js | next dev -H 0.0.0.0 |
| Flask | flask run --host=0.0.0.0 |
| Django | python manage.py runserver 0.0.0.0:8000 |
| Rails | rails server -b 0.0.0.0 |
コンテナの中の「localhost」は、コンテナ自身を指します。パソコンのlocalhostとは別物です。
コンテナから、別のコンテナにつながらない
Docker Composeで、アプリのコンテナからデータベースに接続するとき、接続先を localhost にすると失敗します。接続先には、サービス名を使います。
services:
app:
environment:
DATABASE_URL: postgres://user:pass@db:5432/app # localhost ではなく db
db:
image: postgres:16
また、depends_on は起動する順番を決めるだけで、データベースが接続を受け付けられる状態になるまで待つわけではありません。healthcheck と condition: service_healthy を組み合わせるか、アプリ側で接続をリトライします。
コンテナから、パソコンで動いているサービスにつなぎたい
コンテナの中から、パソコン(ホスト)で動いているサービスに接続するには、host.docker.internal というホスト名を使います。Docker Desktop(Mac・Windows)では標準で使え、Linuxでは起動時に --add-host=host.docker.internal:host-gateway を指定します。
コンテナがすぐ終了する
docker ps -a # STATUS が Exited (1) などになっている
docker logs コンテナ名 # 終了する前のエラーを確認する
コンテナは、メインのプロセスが終了すると停止します。よくある原因は次のとおりです。
- アプリがエラーで終了している(ログに原因が出ている)
- 必要な環境変数が渡っていない
- 実行するコマンドが、すぐに終わるもの(処理が終わると、コンテナも終わる)
中身を調べたい場合は、コマンドを上書きしてシェルで起動します。
docker run -it --rm --entrypoint sh my-app:1.0
コードを変更したのに反映されない
| 状況 | 原因 | 対処 |
|---|---|---|
| Dockerfileでコードをコピーしている | イメージを作った時点のコードが使われている | docker compose up -d --build で作り直す |
| Dockerfileを変えたのに反映されない | ビルドのキャッシュが使われている | docker build --no-cache |
| ボリュームでフォルダをつないでいるのに反映されない | 開発サーバーがファイルの変更を検知できていない | ツールの監視設定(ポーリング)を有効にする |
permission denied(docker.sock)
Linuxで、sudo なしで docker コマンドを実行すると、次のエラーが出ることがあります。
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock
ユーザーを docker グループに追加すると、sudoなしで使えるようになります(追加後、ログインし直す)。
sudo usermod -aG docker $USER
ただし、dockerグループのユーザーは、実質的に管理者(root)と同等の権限を持つことになります。共有サーバーでは、誰を追加するかを慎重に判断します。
Apple Silicon(M1以降のMac)で動かない
ARM用のイメージが用意されていないソフトウェアを使うと、起動時に警告やエラーが出ることがあります。--platform linux/amd64(composeでは platform: linux/amd64)を指定すると、エミュレーションで動かせます(動作は遅くなります)。
ポートがすでに使われている
Bind for 0.0.0.0:5432 failed: port is already allocated
同じポートを、別のコンテナやパソコン上のプログラムが使っています。docker ps で確認するか、パソコン側のポート番号を変えます(例:-p 5433:5432)。
よくある質問
Q. docker run と docker start の違いは何ですか?
A. docker run はイメージから新しいコンテナを作って起動します。docker start は、停止中の既存のコンテナを再開します。runを繰り返すと、そのたびにコンテナが増えていきます。
Q. docker exec と docker compose run の違いは何ですか?
A. exec は起動中のコンテナの中でコマンドを実行します。compose run は、サービスの設定で新しいコンテナを作ってコマンドを実行します。テストやマイグレーションのような1回限りの処理には run --rm が便利です。
Q. .dockerignore は必要ですか?
A. 用意しておくのがおすすめです。node_modules や .git、.env などをイメージに含めないようにすることで、ビルドが速くなり、秘密情報の混入も防げます。
Q. コンテナの中で作ったデータを残すにはどうすればいいですか?
A. ボリュームに保存します。docker-compose.yml で volumes: を設定しておけば、コンテナを削除・作り直ししても、データは残ります。
まとめ
- 基本は run・ps・logs・exec・stop・rm、複数のコンテナは docker compose up・down・logs・exec
-pは 「パソコン側:コンテナ側」。--rmで使い捨て、--nameで名前を付ける- 容量は docker system df で確認し、prune で片付ける。ボリュームの削除はデータの削除
- localhostにつながらないときは、起動状態 → ポートの指定 → アプリが0.0.0.0で待ち受けているか
- コンテナ同士はサービス名で接続。パソコンへは host.docker.internal
- すぐ終了したら docker logs、変更が反映されなければ --build
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Dockerコマンド早見表|よく使う操作とつながらない時の対処」
株式会社RJCでは、AI駆動開発や個人開発の場面でも、開発環境を自分で整えられる力を大切にしています。こうした知識を仲間と共有しながら、一緒に成長を楽しんでいます。
株式会社RJC ― SI事業・SES事業・AI駆動開発。未経験からエンジニアに育てるのが得意な会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。