为什么总是在重启容器时运行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 AND docker-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?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 总是重启而不是热重载

Docker 链接容器作为构建参数

为啥我的图标容器总是可见而不是出现在悬停时? [复制]

在 docker 容器中运行我的 spring 应用程序时清空 h2 db

java 开发在使用Redis时总是报这样的错误,重启就好 但是问题还是会出现。 求哪位大神指教指教

当 docker 容器内的数据发生变化时,Create-react-app 服务器不会重新编译