dockerでCentOS7 +telnetdを起動してホストから接続する
- 検証用にdockerで起動したCentOS7にホストからtelnetdで接続したいので作った
- 検証用なのでコンテナイメージをなるべく小さくするなどの対処は行わない
事前準備
- CentOS7のdockerイメージそのままではtelnetdは使えないのでDockerfileを作ってイメージを作成する
- 任意の場所に以下のDockerfileを作る
- 作成するコンテナイメージでtelnetで接続するユーザー
- ID: root, password: rootとする
- ID: user, password: userとする
# syntax=docker/dockerfile:1-labs FROM centos:7 RUN yum update -y RUN yum install -y xinetd RUN yum install -y telnet-server # rootで同時に接続したいユーサー数の数だけ書く # 一般ユーザーの場合は記載する必要なし RUN echo "pts/0" >> /etc/securetty RUN echo "pts/1" >> /etc/securetty RUN echo "pts/2" >> /etc/securetty RUN echo "root:root" | chpasswd RUN adduser user RUN echo "user:user" | chpasswd COPY <<EOF /etc/xinetd.d/telnet service telnet { flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID disable = no } EOF COPY <<EOF /docker-entrypoint.sh #!/bin/bash xinetd -dontfork -stayalive EOF RUN chmod 777 docker-entrypoint.sh ENTRYPOINT ["/docker-entrypoint.sh"]
※ Dockerfile中にヒアドキュメントがつかえるようになっていたので使ってみた
ヒアドキュメントを使うとホスト側にファイルを用意してdocker内へファイルをコピーするという手間が減るので便利
- ヒアドキュメントの書き方については以下を参考にした
- Dockerfile で新しく使えるようになった構文「ヒアドキュメント」で複数行の RUN をシュッと書く
https://kakakakakku.hatenablog.com/entry/2021/08/10/085625
- Dockerfile で新しく使えるようになった構文「ヒアドキュメント」で複数行の RUN をシュッと書く
- Dockerfileの書き方は以下を参考にした
- How to build a centos7 docker image with a telnet server?
https://stackoverflow.com/questions/56014293/how-to-build-a-centos7-docker-image-with-a-telnet-server
- How to build a centos7 docker image with a telnet server?
telnetdが使える様にしたイメージの作成
# ヒアドキュメントを使う場合はdocker buildではなくて、docker buildxを利用する # コンテナをビルドしているときの表示も少し変わる $ docker buildx build --tag centos-telnetd . $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos-telnetd latest fd4dfbbb65ad 27 minutes ago 796MB
centos-telnetdのイメージを起動する
- 起動するサーバのホスト名: telned
- 起動するサーバのコンテナ名: telnet-server
- 起動するサーバのポート番号: 10023
$ docker run -it --hostname telentd --name telnet-server -p 10023:23/tcp -d centos-telnetd # 以下のように--rmをつけてイメージを起動するとコンテナが停止した時に自動的にコンテナが削除される # $ docker run --rm -it --hostname telentd --name telnet-server -p 10023:23/tcp -d centos-telnetd $ $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a663e68cffa3 centos-telnetd "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 0.0.0.0:10023->23/tcp, :::10023->23/tcp telnet-server
起動したtelnet-serverにtelnetでホストから接続する
$ telnet localhost 10023 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Kernel 5.4.0-109-generic on an x86_64 telentd login: root Password: [root@telentd ~]#
telnet-serverを停止してイメージを削除
$ docker ps -a # 停止しているコンテナも含めて表示する CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a663e68cffa3 centos-telnetd "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:10023->23/tcp, :::10023->23/tcp telnet-server $ docker stop telnet-server $ docker rm a663e68cffa3 # docker rm telnet-serverでも可 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos-telnetd latest fd4dfbbb65ad 33 minutes ago 796MB $ docker rmi fd4dfbbb65ad # docker rmi centos7-telnetd:latestでも可 $ docker ps -a # 停止しているコンテナも含めて表示する CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE