今川館

都内勤務の地味OLです

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


以上