docker-composeで tty: true にしてデーモンがいないコンテナを動かし続ける
docker-compose.ymlを適当に書いてPythonを動かすDockerコンテナを作りたいなと思い、docker-compose.ymlとDockerfileを揃えたが docker-compose up してもプロセスが終わってしまう。
$ docker-compose build ... Successfully built 95a7c527a5d9 Successfully tagged locuuuuust_develop:latest $ docker-compose up Creating network "locuuuuust_default" with the default driver Creating locuuuuust_develop_1 ... done Attaching to locuuuuust_develop_1 locuuuuust_develop_1 exited with code 0
終わってしまった・・
Dockerfileとdocker-compose.ymlの内容は以下の通り
[Dockerfile]
FROM python:3.7 WORKDIR /code COPY . /code RUN pip --disable-pip-version-check --no-cache-dir install poetry
[docker-compose.yml]
version: "3" services: develop: build: . volumes: - .:/code
そういえばmysqlとかredisみたいなデーモンで動かすプロセス作ってないから何も継続する仕事がなくて終わっちゃうんだろうなと思って調べると、 tty: true という設定値をdocker-compose.ymlに書けるらしい。
https://qiita.com/sekitaka_1214/items/2af73d5dc56c6af8a167
https://stackoverflow.com/questions/38546755/docker-compose-keep-container-running
command: sleep infinity とかで対処する方法もあるみたいだけど、何か難しそうなので今回はやめておいた。
docker-compose.ymlを以下の通り書き換えるとうまくいった。
version: "3" services: develop: build: . tty: true # これを追加 volumes: - .:/code
dockerコンテナ起動する。
$ docker-compose up -d Recreating locuuuuust_develop_1 ... done
psしてもちゃんとコンテナが生存している。
$ docker-compose ps Name Command State Ports ---------------------------------------------- locuuuuust_develop_1 python3 Up
コンテナの中に入って作業しても大丈夫。
$ docker-compose exec develop /bin/bash root@b6a09881bf69:/code# poetry init --name=locuuuuust --no-interaction This command will guide you through creating your pyproject.toml config. root@b6a09881bf69:/code# poetry add locustio Using version ^0.11.0 for locustio Updating dependencies Resolving dependencies... (8.2s) Writing lock file Package operations: 17 installs, 0 updates, 0 removals ... - Installing locustio (0.11.0)
ここまで作業した内容はこちらに残しておいた。
https://github.com/oyakata/locuuuuust/releases/tag/v0.1.0
以上