🏞️

Docker で何もしていないコンテナを起動したままにする

2024/03/21に公開

Docker で、compose.yml で指定しているコマンドがうまく動かなかったので、コンテナの中に入っていろいろ調査したかったときに、起動したままにする方法を調べたので備忘録として残します。

前提

  • コンテナは Docker Compose で管理しており、起動は up コマンドで実行
  • 起動後、docker compose exec コマンドで指定したコンテナの中に入りたい
  • 何も指定せずに up するとコンテナが正常終了してしまい、中に入れなくなる

結論

  • compose.yml で、入りたいコンテナの tty オプションを true にする
  • command にも何か指定する必要があるので注意する

tty オプションを true にする

compose.yml で、起動しておきたいコンテナの tty オプションを true にします。

services:
    api:
        (略)
        tty:true

command にも何か指定する必要があるので注意する

このとき、command にも何か指定しておかないと有効にならないので注意します。

services:
    api:
        (略)
        command: /bin/bash
        tty:true

compose.yml サンプル

version: '3'
services: 
  db: (略)
  api: 
    container_name: api-sample
    build: 
      context: ./rails
    command: /bin/bash
    volumes:
      - ./rails:/usr/src/app
    ports: 
      - 3000:3000
    depends_on:
      - db 
    tty: true 
    stdin_open: true
volumes: 
  pg-data:
  bin: 
    driver: local

最後に

これでコンテナが正常終了するのを防いでコンテナの中に入って調査することができるようになりました。
また、TTY に関しては以下の記事が大変参考になりました。

https://zenn.dev/hohner/articles/43a0da20181d34

参考

TTY に関して参考になった記事
https://zenn.dev/hohner/articles/43a0da20181d34

https://anton0825.hatenablog.com/entry/2017/09/14/000000

Discussion