代码之家  ›  专栏  ›  技术社区  ›  leymannx

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

  •  2
  • leymannx  · 技术社区  · 8 年前

    下列的 https://docs.docker.com/compose/rails/ 使用Dockerfile:

    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作曲。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 以及 docker-compose run web rake db:create

    为什么每次重新启动容器时都需要创建数据库?正常情况下,我们运行 db:create 只有一次,从那时起开始运行 db:migrate 运行新迁移。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Max Forasteiro    8 年前

    基本上,您必须将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使用