为什么在重新启动容器时始终运行 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

最新更新