基本的には docker はフォアグラウンドでプロセスが走っていれば docker container のプロセスが終了することは無いと思っていたのですが、うまくいかないことがあったのでその対応を書き残しておきます。
tty: true にする
docker-compose.yml
version: '3'
services:
bot:
image: watashino/image
tty: true # make container stay launched
volumes:
- ../:/src
build:
context: ..
dockerfile: ./docker/services/bot/Dockerfile
でも tty: true
を付けているのに、commandを実行するとコンテナが終わってしまう。
bashを対話モードで起動させておく
Dockerfile
CMD bash -c "npm start && /bin/bash"
これによって、プロセスが起動状態のままになりました。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3ae0sguc0f2c watashino/image "/bin/sh -c 'bash -c…" 28 minutes ago Up 28 minutes bot