質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Lumen

PHP Laravel製のマイクロフレームワーク

Q&A

1回答

1123閲覧

Dockerのコンテナが書き換わる

退会済みユーザー

退会済みユーザー

総合スコア0

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Lumen

PHP Laravel製のマイクロフレームワーク

0グッド

0クリップ

投稿2019/02/03 13:19

dockerでlaravelの学習するためにコンテナを立てて開発を行おうと思っています。

そのためのコンテナとしてこちらのページ(1)を参考にdockerのコンテナを立てました。
また、一度に複数のコンテナで開発を行うためにこちらのページ(2)を参考にリバースプロキシのコンテナを立てました。

以下がリンク(1)を参考に書いたlaravelの開発環境のdocker-compose.ymlです。

yml

1version: "2" 2services: 3 data: 4 build: ./data 5 container_name: laravel-data 6 volumes: 7 - ../:/data 8 - /var/lib/mysql 9 db: 10 image: mariadb 11 volumes_from: 12 - data 13 environment: 14 MYSQL_ROOT_PASSWORD: root 15 fpm: 16 build: ./fpm 17 container_name: laravel-fpm 18 volumes_from: 19 - data 20 nginx: 21 build: ./nginx 22 container_name: laravel-nginx 23 volumes_from: 24 - data 25 links: 26 - fpm:fpm 27 expose: 28 - "80" 29 environment: 30 - VIRTUAL_HOST=laravel.localhost 31 composer: 32 build: ./composer 33 container_name: laravel-composer 34 volumes_from: 35 - data 36 npm: 37 build: ./npm 38 container_name: laravel-npm 39 volumes_from: 40 - data 41 42networks: 43 default: 44 external: 45 name: common

リンク(2)を参考に書いたリバースプロキシのdocker-compose.ymlは以下の通りです。

yml

1version: '2' 2# proxy 3services: 4 5 proxy: 6 image: jwilder/nginx-proxy 7 container_name: nginx-proxy 8 ports: 9 - "80:80" 10 - "443:443" 11 volumes: 12 - /var/run/docker.sock:/tmp/docker.sock:ro 13 restart: always 14 15networks: 16 default: 17 external: 18 name: common

そして、コマンドでdocker network create --driver bridge commonを実行し、ネットワークを作成、その後上二つのdocker-compose builddocker-compose up -dを実行したところ問題なくコンテナが立ち、 laravel.localhost にアクセスしたところ、問題なくコンテナが立っているのが確認できました。

しかし、同時に同じイメージを使った二つ目の開発環境を立てようと、以下のdocker-composeを実行したところ、先に立てておいたコンテナがすべて終了し、新しいコンテナに置き換わってしまいました。
(laravel.localhostにアクセスできなくなり、lumen.localhostしかアクセスできなくなる)

yml

1version: "2" 2services: 3 data: 4 build: ./data 5 container_name: lumen-data 6 volumes: 7 - ../:/data 8 fpm: 9 build: ./fpm 10 container_name: lumen-fpm 11 volumes_from: 12 - data 13 nginx: 14 build: ./nginx 15 container_name: lumen-nginx 16 volumes_from: 17 - data 18 links: 19 - fpm:fpm 20 expose: 21 - "80" 22 environment: 23 - VIRTUAL_HOST=lumen.localhost 24 composer: 25 build: ./composer 26 container_name: lumen-composer 27 volumes_from: 28 - data 29 npm: 30 build: ./npm 31 container_name: lumen-npm 32 volumes_from: 33 - data 34 35networks: 36 default: 37 external: 38 name: common

どうしてコンテナが置き換わってしまうのでしょうか?
上記二つのコンテナを同時に立たせておくにはどうすればよいでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DaichiYasuda

2019/02/03 16:22

フォルダ構成がわからないので、treeコマンドとか打ってもらえますか? あとそれぞれのdocker-compose psの結果とかもらえると嬉しいです。 docker-compose.ymlファイルだけでは理解しにくいです。
kazto

2019/02/03 23:44

各々のプロジェクトディレクトリトップにある.envの最初の50行ずつを追記お願いします。
guest

回答1

0

docker-composeがビルドするimage名が重複しているためではないかと思います。

imageをビルドするとき、ビルドしようとするimageと同名の古いimageですでに動作中のコンテナは止められます。

docker-composeがビルドを行うとき、image名は以下のように決まります。

  • docker-compose.yml内でimageで明示的に指定されていればその名前
  • 指定が無ければ <プロジェクト名>_<サービス名>

今回の場合、imageの記述はないので後者になっているはずですが、サービス名は両方のdocker-compose.ymlで共通のものを使っているので
プロジェクト名が重複していたらimage名が重複します。

<プロジェクト名>の指定方法は優先度の高い順に以下の通りです。

  • -pオプション
  • 環境変数COMPOSE_PROJECT_NAME
  • .envファイルで指定したCOMPOSE_PROJECT_NAME
  • docker-compose.ymlが置かれているディレクトリのディレクトリ名(/foo/bar/baz/docker-compose.ymlならbaz)

特に最後のディレクトリ名は重複しがちです。(例: ソースツリー内にdockerの設定を含めるときに、固定でdockerという名前のサブディレクトリ下に置いている)

この問題に対処するには以下のどちらかです。

  • image名を重複しないようにdocker-compose.yml内で明示的にimageで指定する
  • プロジェクト名が重ならないようにする

同じホストで複数のアプリケーションをdocker-composeで立ち上げようとするならプロジェクト名は別々にするのが望ましいです。重複しないようにディレクトリ名を変えるか.envファイルで指定するのがいいのではないでしょうか。

投稿2019/02/04 06:56

編集2019/02/05 04:07
crhg

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問