自分メモ、アウトプットだからスルーしてもかまいません
この記事は、私が開発現場で実際にハマって学んだことを自分用にメモしたものです。
同じように困っている初心者の方の参考になれば嬉しいです!
---
【問題①】shファイルの権限設定が通らない!
# 何が起きたか
Docker内でシェルスクリプト(entrypoint.shなど)を実行しようとしたら、「Permission denied(権限がありません)」というエラーが出た。
# こんなエラーが出た
./entrypoint.sh: Permission denied# なぜ起きたか
Windows/Macでファイルを作っても、Linux(コンテナ内)では実行権限がないから。
ローカル(ホスト側)で作ったファイルをDockerコンテナにコピーしても、実行権限は自動で付かない。
だから、コンテナ内で明示的に「このファイルは実行できますよ」という権限を付ける必要がある。
# 解決方法:chmod +x で権限を付与
chmod +x /指定のパス/entrypoint.sh`chmod +x`とは?
- `chmod`:ファイルの権限を変更するLinuxコマンド
- `+x`:実行(eXecute)権限を追加する
どこで実行するか?
- Dockerfile内に書くか、コンテナに入ってから実行する
# Dockerfileの例
COPY entrypoint.sh /app/entrypoint.sh
RUN chmod +x /app/entrypoint.sh # ←ここで権限付与# 余談:Dockerの資格について
この問題を調べているうちに、Docker認定資格というものがあることを知った。
調べてみると、Docker Certified Associate(DCA)という資格が結構評価されているらしい。
エンジニアとして差別化できるかも?今後の選択肢として覚えておこう。
---
【問題②】docker compose down -v って何?いつ使うの?
# 結論:データを残したいか消したいかで使い分ける
| コマンド | ボリューム | データ | 使う場面 |
|---------|---------|--------|---------|
| docker compose down | 残る | 残る | コードを修正した時 |
| docker compose down -v | 消える | 消える | データベースをリセットしたい時 |
# 具体例で理解する
#### ケース①:コードを修正した時(down だけでOK)
# コードを修正した
# ↓
docker compose down # コンテナだけ停止
# ↓
docker compose up # 再起動(データはそのまま)理由: プログラムのコードを変更しただけなら、データベースの中身(ユーザー情報など)は消す必要がない。
#### ケース②:データベースがおかしくなった時(down -v で完全リセット)
# データベースの構造を変更した
# or エラーが直らない
# ↓
docker compose down -v # コンテナもボリュームも削除
# ↓
docker compose up # 再起動(データは最初から)理由: データベースの設定ミスやエラーで、もう一度クリーンな状態から始めたい時。
# `-v`オプションって何?
`-v`は「ボリューム(volume)も削除する」という意味。
- **ボリューム**:Dockerがデータを保存する場所(データベースの中身など)
- `-v`を付けると、このボリュームも一緒に削除される
- `-v`を付けないと、ボリュームは残る(=データも残る)
# 注意:`-v`は慎重に使う!
`docker compose down -v`を実行すると、データベースに保存したユーザー情報や記事データなどが全部消えます。
本番環境では絶対に使わないこと!開発環境でのみ使用すること!
---
まとめ
# 今日学んだこと
1. shファイルには実行権限が必要
- chmod +xで権限を付与する
- Dockerfile内に書くのが確実
2. docker compose down の使い分け
- 普段:docker compose down(データは残る)
- リセット:docker compose down -v(データも消える)
3. `-v`オプションは慎重に!
- 開発環境専用
- 本番環境では絶対に使わない
# 初心者の自分へのメモ
- エラーが出たら、まず権限を疑う(chmod系)
- データを残したいか消したいか、常に意識する
- わからない時は`docker compose down`だけにしておく(安全策)
---
今日の学び: Dockerの権限管理とボリューム管理の基本を理解できた。特に-vオプションの使い分けは、データ消失を防ぐために超重要!

