Docker-Composeと複数のサービス


103

これはサンプルの質問です!本番環境では絶対に行わないでください。NGINX / PHP /その他のサービスを別々のコンテナで実行してください!

docker-compose upUbuntuコンテナーを起動すると、で終了しubuntu exited with code 0ます。

を実行するとdocker run -d -ti -p 80:80 -v ~/sph/laravel52:/www/laravel ubuntu、すべて正常に動作します。

Docker Composeを使用してこの動作を再現するにはどうすればよいですか?

これは私のDockerfileです:

# Version: 0.0.1
FROM ubuntu:15.04



ENV DEBIAN_FRONTEND noninteractive

#INSTALL ALL
RUN apt-get update && apt-get install -y  \
       nano \
       php5-fpm \
       php5-mysql \
       nginx



#NGINX CONF
ADD nginx/sites-available/laravel.conf /etc/nginx/sites-available/
RUN rm /etc/nginx/sites-available/default
RUN mv /etc/nginx/sites-available/laravel.conf /etc/nginx/sites-available/default

VOLUME /www


ENTRYPOINT nginx && service php5-fpm start && /bin/bash

CMD ["true"]


EXPOSE 80

そしてdocker-compose.yml

version: '2'
services:
  ubuntu:
        build: .
        container_name: ubuntu
        volumes:
            - ~/sph/laravel52:/www/laravel
        ports:
          - "80:80"

私はあなたがこれを意図的に行うかもしれないと理解していますENTRYPOINT nginx && service php5-fpm start && /bin/bash。しかし、その決定の意味を理解していない場合は、次のgithub.com/phusion/baseimage-dockerを
Daniel Stefaniuk

Img名。私のエラー。Ubuntu
Tim Devlet 2016年

回答:


236

-tコンテナーを実行するときにオプションを使用しているということです。

コンテナーが実行し続けるdocker-compose.ymlファイルでttyオプション(リファレンスを参照)を有効にするかどうかを確認できますか?

version: '2'
services:
  ubuntu:
        build: .
        container_name: ubuntu
        volumes:
            - ~/sph/laravel52:/www/laravel
        ports:
          - "80:80"
        tty: true

4
エラーメッセージが表示ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.されましたtty: trueか:追加した後?
Winters

1
ttyは、擬似端末を作成するため機能します。SQL Server 2017コンテナーでも同様の問題がありました。スタンドアロンモードでは問題なく動作していましたが、マルチコンテナシナリオではdocker-composeモードで終了していました。ここで私はそれを修正するためのttyでやったことあるhandsonarchitect.com/2018/01/...
Nilesh Gule

@NileshGuleはttyが機能する理由を説明してくれてありがとう。しかし、よろしければ、もう少し詳しく知りたいと思います。疑似端末を正確に作成すると、終了できなくなりますか?再度、感謝します。
Luis Milanese

3
@LuisMilaneseは通常、フォアグラウンドプロセスがDockerコンテナー内で完了すると、ジョブが完了したと想定し、コンテナーインスタンスをクリーンアップします。ただし、データベースエンジンやWebサーバーなどは引き続き実行する必要があります。疑似端末を作成することにより、コンテナは存続します。このワークフローを確認するには、ttyを使用して、または使用せずにdocker logs << container name >>コマンドを実行します
Nilesh Gule

ttyが機能しません
。docker
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.