为什么总是在重启容器时运行db:create?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么总是在重启容器时运行db:create?相关的知识,希望对你有一定的参考价值。
使用Dockerfile跟随https://docs.docker.com/compose/rails/:
FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
和docker-compose.yml:
version: '3'
services:
db:
image: postgres
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
它说:
- 停止应用程序=
docker-compose down
- 重新启动应用程序=
docker-compose up
ANDdocker-compose run web rake db:create
为什么每次重启容器时都需要创建数据库?通常我们只运行db:create
一次,然后运行db:migrate
来运行新的迁移。
答案
基本上,您必须将docker本地postgresql数据文件映射到您自己的计算机。
version: '3'
services:
db:
image: postgres
volumes:
- /var/data/myapp/postgres:/var/lib/postgresql/data:rw
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
用这一行:
- /var/data/myapp/postgres:/var/lib/postgresql/data:rw
你将/ var / data / myapp / postgres映射到你的docker / var / lib / postgresql / data并且无论你是不是你的docker-compose都没关系,它仍然可用于下一个docker-compose向上
以上是关于为什么总是在重启容器时运行db:create?的主要内容,如果未能解决你的问题,请参考以下文章
在 docker 容器中运行我的 spring 应用程序时清空 h2 db