Help us understand the problem. What is going on with this article?

Docker コンテナで exit を実行しても停止しないようにする

More than 3 years have passed since last update.

背景

Docker コンテナに attach した際、コンソールで exit を実行するとコンテナが停止し、それまでの変更内容も保存されません。

慣れればよいのですが、大規模システムのテスト環境などでコンテナベースの環境運営を行う場合、外注先のエンジニアがたくさん出入りします。その際、Docker に不慣れなエンジニア(受託開発の場合はほぼ全員でしょう)が勢いで exit をタイプしてしまうことは容易に想像できます。

よって、コンテナの停止はホストからの docker stop のみに限定し、exit は無効とします。

前提

本投稿では Docker 1.9.0 を前提とします。使用する Docker image は ubuntu:latest(2015/11/16現在)です。

実現方式

alias を定義して、代わりに usage を表示します。

alias exit='echo Do not use command `exit` for logout operation. Use Ctrl-p,Ctrl-q.'

最初、Dockerfile に以下のように定義して、/etc/bashrc の最後に追記することを考えました。

Dockerfileの定義内容
CMD "echo alias exit='echo Do not use command `exit` for logout operation. Use Ctrl-p,Ctrl-q.'"

しかし、上記 Dockerfile を用いて docker build したところ、出来上がった Docker イメージには上記コマンド文が反映されていませんでした。

Dockerfileに定義した内容が反映されていない
host# docker run -it test/ctn /bin/bash
ctn# tail -1 /etc/bashrc

原因はわかっていませんが、docker run を実行した際にイメージ内のファイルからプロビジョニングされ上書きされてしまっているのかもしれません。

暫定対応として、ホスト側に ToBe の bashrc ファイルをもっておき、COPY コマンドで置き換えるよう Dockerfile に記述しました。

Dockerfileの定義内容
COPY resource/bashrc /etc/bashrc

上記の Dockerfile を用いてコンテナ生成したところ、無事 exit の alias が有効になりました。

host# docker attach test_ctn
ctn# exit
echo Do not use command `exit` for logout operation. Use Ctrl-p,Ctrl-q.

改善点

以上で目的は果たしていますが、bashrc の構成管理を Docker イメージの外で行わねばならないのが少々億劫です。引き続き対処を検討していきます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした