26

私は docker を初めて使用し、docker compose を使用してプロジェクトを開発しています。ドキュメントから、データを永続的に保つためにデータのみのコンテナーを使用する必要があることを学びましたが、docker-compose を使用してそうすることができません。私が行うたびにdocker-compose down、データベースからデータが削除されますが、実行してdocker-compose stopもデータは削除されません。これは、名前付きデータ ボリュームを作成してdocker-compose downおらず、すべてのコンテナーをほとんど削除していないことが原因である可能性があります。そのため、コンテナに名前を付けようとしましたが、エラーが発生しました。私のymlファイルを見てください:

version: '2'
services: 
   data_container:
     build: ./data
     #volumes:
     #  - dataVolume:/data
  db:
    build: ./db
    ports:
      - "5445:5432"
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_DB=postgres
    #   - PGDATA=/var/lib/postgresql/data/pgdata
    volumes_from:
     # - container:db_bus
       - data_container
  geoserver:
    build: ./geoserver
    depends_on:
      - db
    ports:
      - "8004:8080"
    volumes:
      - ./geoserver/data:/opt/geoserverdata_dir

  web:
    build: ./web
    volumes:
      - ./web:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
    command: python manage.py runserver 0.0.0.0:8000

  nginx:
    build: ./nginx
    ports:
      - "83:80"
    depends_on:
      - web

data_container の Docker ファイルは次のとおりです。

FROM stackbrew/busybox:latest
MAINTAINER Tom Offermann <tom@offermann.us>

# Create data directory
RUN mkdir /data

# Create /data volume
VOLUME /data

これを試しましたが、docker-compose down を実行すると、データが失われます。コメント行を確認できるように、data_container に名前を付けてみましたが、次のエラーが表示されました。

ERROR: Named volume "dataVolume:/data:rw" is used in service "data_container" but no declaration was found in the volumes section.

だから今私がやっていることは、コンテナという名前だけのスタンドアロンデータを作成し、それをvolumes_fromdbの値に入れることです。正常に機能し、実行した後でもデータは削除されませんでしたdocker-compose down

私のクエリ:

  • を使用してデータベースのデータを格納できるコンテナを作成し、docker-composeそれらを適切に使用するための最良のアプローチは何ですか?

  • 私の意識は、私が選択したアプローチ、つまりスタンドアロンのデータ コンテナーを作成するアプローチについて同意していません。何かご意見は?

4

3 に答える 3

15

docker-compose downはコンテナーを停止しますが、コンテナーも削除します (ネットワークなどすべてを含む)。

代わりにdocker-compose stopを使用してください。

docker-compose を使用してデータベースのデータを格納できるコンテナーを作成する最善の方法は、名前付きボリュームを使用することだと思います。

version: '2'
services:

  db: #https://hub.docker.com/_/mysql/
    image: mysql
    volumes:
      - "wp-db:/var/lib/mysql:rw"
    env_file:
      - "./conf/db/mysql.env"

volumes:
  wp-db: {}

ここでは、「wp-db」という名前のボリュームを作成し (存在しない場合)、/var/lib/mysql にマウントします (読み取り/書き込みモード、デフォルト)。これは、データベースがそのデータを格納する場所です (mysql イメージ用)。

指定されたボリュームがすでに存在する場合は、作成せずに使用されます。

起動時に、mysql イメージは /var/lib/mysql (ボリューム) にデータベースがあるかどうかを確認して、それらを使用します。

こちらの docker-compose ファイル リファレンスで詳細を確認できます: https://docs.docker.com/compose/compose-file/#/volumes-volume-driver

于 2016-09-22T10:23:49.427 に答える