私がやろうとしていること
ある docker コンテナーで yesod Web アプリケーションを実行し、別の docker コンテナーの postgres データベースにリンクしたいと考えています。
私が試したこと
次のファイル階層があります。
/
api/
Dockerfile
database/
Dockerfile
docker-compose.yml
は次のdocker-compose.yml
ようになります。
database:
build: database
api:
build: api
command: .cabal/bin/yesod devel # dev setting
environment:
- HOST=0.0.0.0
- PGHOST=database
- PGPORT=5432
- PGUSER=postgres
- PGPASS
- PGDATABASE=postgres
links:
- database
volumes:
- api:/home/haskell/
ports:
- "3000:3000"
実行sudo docker-compose up
すると、API コンテナの起動にまったく失敗するか、または同じ頻度で次のエラーが発生します。
api_1 | Yesod devel server. Press ENTER to quit
api_1 | yesod: <stdin>: hGetLine: end of file
personal_api_1 exited with code 1
ただし、実行すると、sudo docker-compose database up &
作成を使用せずに API コンテナーを起動し、代わりに
sudo docker run -p 3000:3000 -itv /home/me/projects/personal/api/:/home/haskell --link personal_database_1:database personal_api /bin/bash
ファイルexport
に設定されている環境変数docker-compose.yml
を手動で実行yesod devel
して、ローカルホストで自分のサイトに正常にアクセスできます。
最後に、単独で実行すると、3 番目の異なる動作が得sudo docker-compose run api
られます。これは正常に開始されたようですが、ブラウザでページにアクセスできません。実行sudo docker-compose run api /bin/bash
することで、このコンテナーを調べることができ、設定されている環境変数docker-compose.yml
がすべて正しく設定されていることを確認できました。
望ましい動作
バックグラウンドでデータベースを実行してから、実行するだけで API コンテナーのシェルに環境を手動で設定して得た結果を得たいと考えていますsudo docker-compose up
。
質問
明らかに、私が試みている 3 つの異なるアプローチは、わずかに異なることを行います。しかし、docker と docker-compose についての私の理解からすると、それらは本質的に同等であると期待できます。誰かがどのように、なぜそれらが異なるのか、可能であればどのように私が望む結果を達成できるのかを説明してもらえますか?