52138


いつもお世話になっております。  
dockerを使ってローカル環境の作成をしております。  
下記のような `docker-compose.yml` を作成しており、`command` オプションにて起動時にシェルを実行したいと思っております。

docker-compose.yml

[code]

    version: '3'
    services:
        php:
            build: ./Dockerfiles/php
            container_name: "laravel_php"
            volumes:
                - ./src:/var/www/html
            working_dir: /var/www/html
            command: ["php", "entrypoint.sh"]
            tty: true
            stdin_open: true
    
[/code]

ただ、この状態で実行をすると、下記のようにコンテナが終了してしまいます。

[code]

    $ docker-compose up
    Recreating laravel_php ... done
    Attaching to laravel_php
    laravel_php | 2019/01/20 07:41:14 entrypoint.sh [INFO] Connection confriming...
    laravel_php exited with code 0
    
    $ docker ps -all
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
    0371439067da        laravel_php     "docker-php-entrypoi…"   11 seconds ago      Exited (0) 10 seconds ago                       laravel_php
    
[/code]

entrypoint.sh の中身はテストではechoしているだけのものになり、エラー等は発生しておりません。

[code]

    #!/bin/bash
    set -e
    echo `date '+%Y/%m/%d %H:%M:%S'` $0 "[INFO] Connection confriming..."
    
[/code]

`command` オプションを設定せずに `docker-compose up` は正常に起動し続けて、コンテナ内に入って、実行は出来ております。

これを、 `command` を実行した後も、起動し続けるようにしたいのですが、その方法をご教授頂きたく投稿をさせていただきました。

何卒、よろしくお願いいたします。


CC BY-SA 4.0
2019-01-20T07:55:21.833
52132
2019-01-20T11:11:22.510
8755
question
docker-compose
docker-compose up で tty: trueを付けているのに、commandを実行するとコンテナが終わってしまう


フォアグランドのプロセスが動き続ければコンテナは終了しないはずなので、下記のようにcommandを定義するのはどうでしょう。この場合は`bash`を対話モードで動かし続けます。

[code]

    command: bash -c "bash entrypoint.sh && /bin/bash"
    
[/code]

ところで、下記のcommandの定義は `php entrypoint.sh`
と展開され、PHP処理系にシェルスクリプトが渡されてしまっているので、記述の誤りではないでしょうか。

[code]

    command: ["php", "entrypoint.sh"]
    
[/code]


CC BY-SA 4.0
2019-01-20T11:11:22.510
52138
2019-01-20T11:11:22.510
7936
52132
answer