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

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

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

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

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

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

Q&A

解決済

1回答

3196閲覧

Dockerのデータボリュームのリストアがうまくいかない

d0ne1s

総合スコア32

docker-compose

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

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

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

1グッド

1クリップ

投稿2020/03/12 00:09

##状況
Dockerのデータベースの情報を他のPCで共有しようと思い、データボリュームのバックアップ→リストアを試みました。
バックアップ時には数十MBのtarファイルが出力され、リストア時にも特にエラーメッセージは表示されないように見受けられました。

しかし該当のDBにRailsからアクセスすることができません。
TablePlusというDBクライアントからもアクセスができない状態です。

##作業の流れ

#コンテナ名を確認 $ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7b6a79314721 sample-app_web "/bin/sh -c 'rm -f t…" 5 minutes ago Up 5 minutes 0.0.0.0:3000->3000/tcp sample-app_web_1 2ed21c2aac12 postgres "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 0.0.0.0:5434->5432/tcp sample-app_db_1

terminal

1#バックアップ 2$ docker run --rm --volumes-from sample-app_db_1 -v `pwd`:/backup busybox tar cvf /backup/backup.tar /var/lib/postgresql/data

terminal

1#コンテナとデータボリュームを削除→再作成 2$ docker-compose down --volumes 3$ docker-compose up -d

terminal

1#データボリュームをリストア 2$ docker run --rm --volumes-from sample-app_db_1 -v `pwd`:/backup busybox tar xvf /backup/backup.tar

##環境
macOS Mojave 10.14.5
Docker Desktop 2.1.0.4
Ruby 2.6.5
Rails 6.0.2

yml

1#docker-compose.yml 2version: '3' 3services: 4 db: 5 image: postgres 6 volumes: 7 - psgl_data:/var/lib/postgresql/data 8 environment: 9 POSTGRES_USER: root 10 POSTGRES_PASSWORD: password 11 ports: 12 - 5434:5432 13 web: 14 build: 15 context: . 16 dockerfile: Dockerfile 17 command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" 18 tty: true 19 stdin_open: true 20 depends_on: 21 - db 22 ports: 23 - "3000:3000" 24 volumes: 25 - .:/app_name 26volumes: 27 psgl_data:

Dockerfile

1FROM ruby:2.6.5 2 3RUN apt-get update -qq && apt-get install -y nodejs postgresql-client 4 5RUN apt-get update && apt-get install -y curl apt-transport-https wget && \ 6curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ 7echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ 8apt-get update && apt-get install -y yarn 9 10RUN mkdir /app_name 11ENV APP_ROOT /app_name 12WORKDIR $APP_ROOT 13 14ADD ./Gemfile $APP_ROOT/Gemfile 15ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock 16 17RUN gem install bundler 18RUN bundle install 19ADD . $APP_ROOT

yml

1# config/database.yml 2default: &default 3 adapter: postgresql 4 encoding: unicode 5 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 6 host: db 7 username: root 8 password: password 9 10development: 11 <<: *default 12 database: sample-app_development
s.k👍を押しています

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

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

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

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

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

yoorwm

2020/03/12 01:05

この「バックアップの仕方」は、どこ情報でしょうか?
bsdfan

2020/03/12 09:16

このやり方でバックアップをとるなら、tarで固める時も、tarを展開するときも、postgresのプロセスは停止しておかないと、ちゃんとしたバックアップ/リストアにならないと思います。
d0ne1s

2020/03/12 09:20

ご指摘ありがとうございます。 あまり一般的な方法では無いという事でしょうか。
guest

回答1

0

ベストアンサー

PostgreSQLのバックアップには、

があります。今回のは後者にあたりますが、リンク先にあるようにサーバーを停止させてバックアップ/リストアをしないといけません。
docker run ... tar ...を実行する前に、docker-compose stopを入れれば大丈夫かもしれません。

ただ、おすすめは『SQLによるダンプ』にある、pg_dumpかpg_dumpallを使ったやり方のほうです。(必要なオプションは調整ください)

バックアップ
docker-compose exec -T db pg_dumpall > ./backup.sql

リストア
docker-compose exec -T db psql -f - < ./backup.sql

投稿2020/03/12 13:10

bsdfan

総合スコア4587

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

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

d0ne1s

2020/03/13 00:33

ご回答いただきありがとうございます。 バックアップ、リストアの前にdocker-compose stopを入れたらうまくいきました! 『SQLによるダンプ』の方のやり方も、今日の夕方に試して見ようと思います。 助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問