質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.78%

docker runのオプションについて

解決済

回答 1

投稿

  • 評価
  • クリップ 7
  • VIEW 19K+

score 280

docker のバージョンは1.8です。

いくつか質問します。
常識的なことかもしれませんがおねがいしますm(__)m(汗)

docker runのオプション

1.-t は何をするのでしょうかttyの確保と書いてありましたが、いまいちわかりません。
 何の略ですか?また何をしてくれるのでしょうか?

2.-i について調べました、「stdoutを開きっぱなし」「コンテナの標準入力を開く」とかいてありましたが、いまいちわかりません。

3.-p 1234:80 が私の解釈があっているのでしょうか?
外部から80番宛のパッケが来た場合、ローカル内では1234番に送るということですか?


以上おねがいしますm(__)m
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+12

1. -t について
簡単に説明するならDockerコンテナ内の標準出力とホスト側の出力をつなげるものです。
文字出力だけなら-tを指定しなくても変わらないのですが、色を出力したりC-Hでバックスペースのようなターミナル制御ができなくなります。

参考: ttyについて ttyやptsってなんぞ?

2. -i について
-tとは逆にホスト側の入力をコンテナの標準出力をつなげるものです。
-iを指定するとキーボードから入力した文字はコンテナ内のプロセスに送られbashなどでコマンドを実行できるのですが、-iがない場合は文字が送られないので何も入力できなくなります。

シェルのようにコマンド入力と出力が必要なプロセスを実行するときは1と2の両方を指定します。

3. -pについて
イメージ図を作ってみました。
-p 1234:80と指定するとホスト側のポート1234をコンテナのポート80に転送します。
docker run -pオプション

ホストとコンテナのtty
tty

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/11/09 12:07

    回答ありがとう御座いますm(__)mいつもありがとう御座います。


    -itは両方共ttyに関連していたんですね。
    telnetまたはsshで接続された順に/dev/pts/1から割り当てられ、互いにメッセージなどのやりとりができるというもので、いいでしょうか?

    例えば、リモートPCでubuntuにssh接続したとします、リモート側は/dev/pts/1が割り当てられ、ubuntuにメッセージを送りたい場合に「echo "hello" > /dev/pts0」とやれば、ubuntuにhelloメッセージが行くということですか?


    実際に試してみましたがうまくいけませんでした。
    host# docker start -a -i test(-tオプションがなかったです。多分startコマンドでは、host側からの一方通行なのかな...)
    コンテナ#tty
    /dev/console
    デタッチでホスト側へ
    host# echo "hello" > /dev/console
    host#docker attach test
    コンテナ#cat /dev/console
    ”hello”メッセージが表示されませんでした...そもそもメッセージの格納先が/dev/consoleであっているのかとおもいましたけど


    -pに関しての図ありがとう御座います。
    1234番宛はdockerの80に転送されるっていうことなんですね。dockerの80番ポートに送りたい場合は、1234番を指定しないといけないって感じですか。

    キャンセル

  • 2015/11/09 21:50

    ttyについて以下のようにすればメッセージが行く事を確認できます。

    dockerホスト側でターミナルを開く。ttyの結果を/dev/pts/0とします。
    ここからdocker runでbashを実行すると、ホストの/dev/pts/0がコンテナの/dev/consoleとつながります。
    dockerホスト側でもう1つターミナルを開き、echo "hello" > /dev/pts/0を実行します。
    すると最初に開いたターミナルのコンテナにhelloが表示されます。
    参考リンクと同じような図を書くと以下のようになるはずです。
    dockerホストの/dev/pts/0---docker---dockerコンテナの/dev/console---bash

    -pは質問が1234だったのでそのまま書きましたが、他のポートも指定できます。
    :の左がホストに割り当てたい任意のポート、:の右がコンテナに転送したい任意のポートを指定できます。

    キャンセル

  • 2015/11/10 13:45

    返事ありがとうございます。
    ターミナルを増やして試す方法があるんですね。てっきり、リモートでログインしてやるものかと。。。
    コンテナとホスト間がメッセージのやり取りができませんでした。ホストからconsoleへ送れるのですが、コンテナ側からだと「bash: /dev/pts/3: Permission denied」とエラーが
    ホスト側はpts3です。

    dockerとは関係ないのですが、ただターミナルを増やして、ptsの番号も違うしメッセージのやり取りも出来ました。ptsについて、少し理解で来ましたm(__)m

    キャンセル

  • 2015/11/10 22:54

    ホストとコンテナのttyを図におこしてみました。
    1つ目のターミナル(/dev/pts/0)はdockerを通じてコンテナ内の/dev/consoleとつながっています。
    2つ目のターミナル(/dev/pts/1)は1つ目のターミナルと同じホストなので/dev/pts/0を通じてコンテナ内に届きます。
    そしてコンテナの内側は/dev/consoleにつながっているのですが直接ホスト側の/dev/pts/0が見えているわけではありません。
    ubuntu:latestで「ls /dev/pts/」を実行するとptmxしかないので/dev/pts/3はファイル書き込みできずにPermission deniedになったと思われます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る