【问题标题】:Why to always run db:create when restarting containers?为什么在重新启动容器时总是运行 db:create?
【发布时间】:2018-03-01 23:19:41
【问题描述】:

使用 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 来运行新的迁移。

【问题讨论】:

    标签: ruby-on-rails database postgresql docker docker-compose


    【解决方案1】:

    基本上,你必须将你的 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,它仍然可以用于下一个码头工人组成

    【讨论】:

    • 完美!只有rw 已弃用。
    • 而且我不会安装绝对路径。只需- ./postgres:/var/lib/postgresql/data
    猜你喜欢
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多