为什么总是在重启容器时运行db:create?

问题描述 投票:1回答:1

使用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个回答
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都没关系,它仍然可用于下一个docker-compose向上

© www.soinside.com 2019 - 2024. All rights reserved.