コンテナにTTYを接続する方法は?

みなさんこんにちは、

特定のコンテナのシェルにアクセスしようとすると、次のような表示が出ます。

これらを有効にするにはどうすればいいでしょうか?composeファイルには tty: true を設定していますが…効果がありません。他のコンテナではシェルが接続できますが、このコンテナではできません。「execute」を試すと、このエラーが出ます:

完全に行き詰まっています…

QNAPのシェルだけを使うので問題なければ、以下のコマンドで

docker exec -it containernme sh

コンテナ上でシェル環境を利用できます。

そのコマンドはどこで実行すればいいですか?SSHシェルで実行しますか?

プレーンなシェルを開きます(WindowsのCMDでSSHコマンドを使うか、puttyのようなSSH対応のコンソールプログラムを使用します)

「いいね!」 1

同じエラーです:

[jono@NA9D-NAS-3 ~]$ docker exec -it vikunja-vikunja-1 sh
OCI runtime exec failed: exec failed: unable to start container process: exec: "sh": executable file not found in $PATH: unknown
[jono@NA9D-NAS-3 ~]$

だから、Composeについて何かを尋ねているのです…

そのコンテナにはシェルがないようですね

今、uptime-kumaでこれを試したところ、問題なく動作しました

つまり、それを聞いているんです。どうやってシェルを追加できるのか…

今、stdin_open: true を追加してみたところ、少し近づきました。

でも、まだコンテナの実際のシェルには入れません。

シェルに入る方法はないのでしょうか?アプリで何かをテストするためにコマンドを実行しようとしています。もしかしたら docker exec コマンドを使えばできるかもしれませんね。

試してみます。

docker composeファイルに、CS GUIでTTYにアクセスするために次の2行を追加してください

stdin_open: true
tty: true

それをやりました。違いはありません…

不思議ですね、私はシンプルなネットワークツールアプリケーションで接続してコマンドを実行できます

services:
  network-tools:
    image: 'jonlabelle/network-tools:latest'
    restart: unless-stopped
    container_name: network-tools
    stdin_open: true
    tty: true
    networks:
      - backendApps
      
networks:     
  backendApps:
    external: true

あなたのアプリは対話用のシェルを提供していない可能性があり、「Execute」コマンドを使ってシェルを起動する必要があるかもしれません。

使用したいもの(bash/sh)を選択して「execute」をクリックすると、ログインシェルが起動し、その中でコマンドを実行できます。

これで何か助けになるか試してみてください。

コンソールを実行しようとすると、上記のエラーが表示されます。

それはおそらく、dockerイメージにbashコマンドが含まれていないことを意味します。したがって、シェルで接続することはできないと思います。

/bin/shは動作しましたか?

dockerがオープンソースであれば、/binパスにどんなプログラムがあるか確認でき、execute consoleを使ってコマンドとして実行できるかもしれません。

どちらのコンソールも動作しませんでした。追加する方法があるのか確信が持てませんでした。

問題はこうです:コンテナ内でコマンドを実行するには、そのコマンドがコンテナイメージ内に存在していなければなりません。もしイメージにシェルがなければ、execするものがありません。

シェルを追加できるかもしれませんが、それにはイメージがどのように作られたかを知る必要があります。幸いにも、これはオープンソースのビルドです。Dockerfileはこちらです:

これを見ると、Alpine Linux上でビルドされていることが分かります。ですので、あなたのイメージをベースにしたDockerfileを作成し、bashを追加してください。

FROM vikunja/vikunja
RUN apk add --no-cache bash

そして新しいイメージをビルドします:
docker build newimage

docker-composeファイルを使ってコンテナを起動している場合は、イメージを「newimage」(または好きな名前)に変更する必要があります。そうすれば、コンテナ内でbashをexecできます。

「いいね!」 3

わかりました。ありがとうございます。それについて調べてみます。アップデートなどの際に少し面倒になりますね。なぜシェルがないのか、Vikunjaフォーラムで質問してみるかもしれません。診断コマンドを実行しようとしています。

現実的には、もしあなたが単に何かをデバッグしようとしているだけなら、そのためにシェルを追加するのもデバッグプロセスの一部と見なせます。それは永久的なものにする必要はありません…必要な情報が得られたら、提供されたイメージに戻して先に進めばいいのです。

…もちろん、私がよく経験することですが、デバッグを有効にすると問題が解決してしまう、ということもよくあります。:slightly_smiling_face: