web-dev-qa-db-ja.com

docker-compose.ymlファイルを使用してボリュームに名前を付ける方法は?

Dockerは初めてで、作成したデータボリュームの名前を設定する方法を見つけようとしています。現在、ディレクトリは/ var/libs/dockerの下に長いハッシュとして自動的に名前が付けられていますが、これはユーザーフレンドリーとはほど遠いものです。

ここに示すように、MODXの開発環境をセットアップしようとしています: https://github.com/modxcms/docker-modx

現在、私のdocker-compose.ymlファイルは次のとおりです。

web:
  image: modx
  links:
    - db:mysql
  ports:
    - 80:80
db:
  image: mysql
  environment:
    MYSQL_ROOT_PASSWORD: example
  ports:
    - 3306:3306
  command: mysqld --sql-mode=NO_ENGINE_SUBSTITUTION
myadmin:
  image: phpmyadmin/phpmyadmin
  links:
    - db:db
  ports:
    - 8080:8080

これは完全に機能しますが、IDEで直接編集するデータボリュームに名前を付ける方法がわかりません。

(副次的な質問として、/ var/libs/dockerの下に作成する必要がありますか?それとも、ホームフォルダー内のディレクトリに設定する方法はありますか?)

更新:@ julianoの助けを借りて、docker-compose.ymlファイルを次のように更新しました:

version: '2'

services:
    web:
      image: modx
      volumes: 
        - html:/home/muzzstick/dev/modxdev
      links:
        - db:mysql
      ports:
        - 80:80
    db:
      image: mysql
      environment:
        MYSQL_ROOT_PASSWORD: example
      ports:
        - 3306:3306
      command: mysqld --sql-mode=NO_ENGINE_SUBSTITUTION
    myadmin:
      image: phpmyadmin/phpmyadmin
      links:
        - db:db
      ports:
        - 8080:8080

volumes:
    html:
        external: false

残念ながら、これによりWebコンテナの実行が停止するようです。 dbおよびmyadminコンテナーは、正常に実行されていることを示しています。エラーはありませんでした...docker start docker_web_1と入力すると、開始したように見えますが、docker ps -aは、開始するとすぐに終了したことを示しています。

アップデート2

docker-compose up -dの実行は、問題なく実行されているようです。ただし、以下に示すように、Webコンテナは作成されるとすぐに終了します。

    CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS                     PORTS                            NAMES
a1dd6d8ac94e        modx                    "/entrypoint.sh apach"   10 seconds ago      Exited (1) 5 seconds ago                                    docker_web_1
ee812ae858dc        phpmyadmin/phpmyadmin   "/run.sh phpmyadmin"     10 seconds ago      Up 5 seconds               80/tcp, 0.0.0.0:8080->8080/tcp   docker_myadmin_1
db496134e0cf        mysql                   "docker-entrypoint.sh"   11 seconds ago      Up 10 seconds              0.0.0.0:3306->3306/tcp           docker_db_1

更新3OKこのコンテナのエラーログには次のように表示されます。

error: missing MODX_DB_Host and MYSQL_PORT_3306_TCP environment variables
Did you forget to --link some_mysql_container:mysql or set an external db
with -e MODX_DB_Host=hostname:port?

このエラーの原因は https://github.com/modxcms/docker-modx/blob/master/Apache/docker-entrypoint.sh#L15-L2 のようです。

Docker-composeバージョン2ではリンクの処理が異なるようなものでしょうか?

6
Muzzstick

作成ファイルのバージョン2 を使用して名前付きデータボリュームを作成するには、分離された領域があります。

version: '2'

services:
  db:
    image: postgres
    volumes:
      - amazingvolume:/var/lib/postgresql/data

volumes:
  amazingvolume:
    external: true

したがって、ボリューム名(amazingvolume)を定義できます。それが 外部かどうか の場合、サービス(この例ではdb)の下で、マウントするディレクトリを定義できます。

10
Juliano Alves

Dockerのドキュメントで、ホストされているマウント済みボリュームを検索するだけです。

version: '2'

services:
  web:
    image: modx
    environment:
      - MYSQL_PORT_3306_TCP=3306
      - MODX_DB_Host=mysql:3306
    volumes: 
      - /home/muzzstick/dev/modxdev/html:/var/www/html

    links:
      - db:mysql
    ports:
      - 80:80
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: example
    ports:
      - 3306:3306
    command: mysqld --sql-mode=NO_ENGINE_SUBSTITUTION
  myadmin:
    image: phpmyadmin/phpmyadmin
    links:
      - db:db
    ports:
      - 8080:8080

変化する /var/www/htmlhtmlファイルがコンテナ内にあるディレクトリに移動します。また、ホストの左側にディレクトリを作成し、すべてのユーザーに読み取り権限を付与します。

よろしく