2

私がやろうとしていること

ある 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 についての私の理解からすると、それらは本質的に同等であると期待できます。誰かがどのように、なぜそれらが異なるのか、可能であればどのように私が望む結果を達成できるのかを説明してもらえますか?

4

1 に答える 1

6

エラー メッセージは、API コンテナーがコマンドラインからの入力を予期していることを示しています。これは、TTY がコンテナーに存在することを予期しています。

-t「手動」開始では、Docker にフラグ (の-itv省略形)を介してコンテナー内に TTY を作成するように指示し-i -t -v、API コンテナーが正常に実行されるようにします。

docker-compose で同じことを実現するにはtty、API サービスにキーを追加して;docker-compose.ymlに設定する必要があります。true

database:
    build: database
api:
    build: api
    tty: true # <--- enable TTY for this service
    command: .cabal/bin/yesod devel # dev setting
于 2015-03-23T21:55:02.697 に答える