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

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

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

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

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

Q&A

解決済

2回答

4915閲覧

dockerでDBのコンテナを作成してもDBの中身が残っている

moshi

総合スコア90

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

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

0グッド

1クリップ

投稿2019/01/21 08:14

前提・実現したいこと

dockerの勉強中です。

dockerでDBを作成したくいろいろ試してる途中(DB構築時にテーブルやデータを入れる練習中)なのですが、イメージを再構築してコンテナを起動してもDBの中身が残ったままです。

どうすれば新規に作成できるでしょうか?
なにか手順が足りないでしょうか?

試したこと

コンテナを停止、削除してからvolumeを削除

docker stop container_name docker rm -v container_name docker volume rm vol_data

イメージを再構築してコンテナを起動

docker-compose up -d --build

docker-compose.yml

version: "3" services: web: build: $PWD/docker/web # Specifying the file to build image: webapi # Image name container_name: web-container # Container name ports: # Port on the left to access,right side is the port inside the container - "3000:3000" environment: # Container internal environment variable - "DATABASE_HOST=db" - "DATABASE_PORT=5432" - "DATABASE_USER=postgres" - "DATABASE_PASSWORD=mysecretpassword1234" - "PGPASSWORD=mysecretpassword1234" - "DATABASE_NAME=testdb" links: - db stdin_open: true tty: true entrypoint: ash /app/run.sh java -jar /app/test.jar # command: ash # for debug db: image: postgres:10.6-alpine # Base image file container_name: db-container # Container name ports: # Port on the left to access,right side is the port inside the container - "5432:5432" environment: # Container internal environment variable - "POSTGRES_USER=postgres" - "POSTGRES_PASSWORD=mysecretpassword1234" - "POSTGRES_DB=testdb" volumes: - $PWD/docker/db/init:/docker-entrypoint-initdb.d # Initial data create - dbdata:/var/lib/postgresql/data # mount postgresql volume volumes: dbdata: driver_opts: type: none device: $PWD/.dbdata # Create volume for postgresql o: bind

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

macOS

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

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

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

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

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

guest

回答2

0

すでに回答がついていますが、ホスト環境のボリュームにDBのデータが格納される様な設定になっているので、同じ設定であれば、すでにある内容を参照する様になります。

回答にある通り、共有しているデータを削除する方法の他、設定を変更する、初期起動時に内容をクリアしてしまう、共有しないなどやり方はいくつかあるかと思います。

投稿2019/01/21 10:18

t_obara

総合スコア5488

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

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

0

ベストアンサー

YAML

1 2 db: 3 image: postgres:10.6-alpine # Base image file 4 container_name: db-container # Container name 5 ports: # Port on the left to access,right side is the port inside the container 6 - "5432:5432" 7 environment: # Container internal environment variable 8 - "POSTGRES_USER=postgres" 9 - "POSTGRES_PASSWORD=mysecretpassword1234" 10 - "POSTGRES_DB=testdb" 11 volumes: 12 - $PWD/docker/db/init:/docker-entrypoint-initdb.d # Initial data create 13 - dbdata:/var/lib/postgresql/data # mount postgresql volume 14 ↑ここでvolume dbdataをマウントしている 15     この1行を削除することで、コンテナ内にデータを保持するようになる 16 17volumes: 18 dbdata: 19 driver_opts: 20 type: none 21 device: $PWD/.dbdata # Create volume for postgresql 22         ↑dbdataの実体は $PWD/.dbdata である 23 o: bind 24

docker-compose.ymlと同じディレクトリに、.dbdataというディレクトリがあると思います。ここにDBの実データが入っていますので、これを削除すると良いでしょう。

投稿2019/01/21 09:16

編集2019/01/22 01:56
kazto

総合スコア7196

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

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

moshi

2019/01/22 01:15

実態となる.dbdataってホスト側ではなくコンテナ側に作成して指定することもできたりするものでしょうか?
kazto

2019/01/22 01:28

コンテナ内に作成しても、一度downしてupし直すとまっさらになってしまうので、一般的ではないと思います。
moshi

2019/01/22 01:47

絶対そうですよね!そんな使い方おかしいですよね!自分もホスト側に保持しないと消えてしまうと考えたのですがそうしろと言われてしまい… 参考までにお聞きしたいのですがdevice: $PWD/.dbdataをどうするとコンテナ内に実体を置けますか?
kazto

2019/01/22 01:58

回答内のdocker-compose.ymlに削除箇所を追記しました。 作業指示が間違っているということは往々にして発生しえます。 そこはコミュニケーションを密に取って行かないと、大きな手戻りになりますね。
moshi

2019/01/22 02:14

丁寧にありがとうございます。 今試してみておそらくできたと思うのですが、指定の1行を削除した場合しなかった時の.dbdataのような実体を保持する場所はどこになるのでしょうか? ホスト側に保存していた時と違って.dbdataのディレクトリを作成しなくてもエラーにならなかったのでなぜだろうと思いお聞きしました。
kazto

2019/01/22 03:26

コンテナ内の`/var/lib/postgresql/data`ですね。.dbdataのマウント先です。
moshi

2019/01/22 05:14

ありました!ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問