Pasang TTY ke container?

Hai semua,

Saya sedang mencoba mengakses shell dari sebuah container tertentu dan saya mendapatkan ini:

Apa yang perlu saya lakukan untuk mengaktifkan ini? Saya sudah menambahkan tty: true di file compose saya… Tapi tidak membantu. Container lain yang saya jalankan shell-nya bisa terhubung. Yang ini tidak. Jika saya coba “execute” - saya mendapatkan error ini:

Jadi buntu…

Jika Anda tidak masalah hanya menggunakan shell QNAP, Anda dapat melakukan

docker exec -it containernme sh

Dan Anda akan mendapatkan lingkungan shell di dalam container

Di mana saya menjalankan perintah itu? Di shell SSH?

Anda membuka shell biasa (perintah SSH melalui CMD di Windows atau program konsol yang kompatibel dengan SSH seperti putty)

1 Suka

Kesalahan yang sama:

[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 ~]$

Itulah sebabnya saya bertanya tentang sesuatu di Compose…

Saya rasa kontainernya memang tidak memiliki shell

Saya baru saja mencoba ini di uptime-kuma dan berhasil dengan baik

Nah, itu yang sedang saya tanyakan. Bagaimana cara menambahkan shell…

Saya baru saja mencoba menambahkan stdin_open: true dan saya semakin dekat:

Tapi saya masih belum bisa masuk ke shell sebenarnya dari container.

Jadi tidak ada cara untuk masuk ke shell? Saya mencoba menjalankan perintah untuk aplikasi saya guna menguji sesuatu. Mungkin lewat perintah docker exec?

Akan saya coba.

di file docker compose tambahkan dua baris berikut untuk mengakses tty di antarmuka grafis CS

stdin_open: true
tty: true

Saya sudah melakukannya. Tidak ada bedanya…

aneh, saya bisa terhubung dan menjalankan perintah di aplikasi alat jaringan sederhana

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

Mungkin aplikasi Anda tidak menyediakan shell untuk berinteraksi dan Anda perlu meluncurkan satu menggunakan perintah Execute.

pilih yang Anda inginkan (bash/sh) dan klik execute, Anda akan mendapatkan shell login dan dapat menjalankan perintah di dalamnya.

Coba lihat apakah itu membantu.

Saat saya mencoba menjalankan konsol, saya mendapatkan error seperti yang ditunjukkan di atas.

itu kemungkinan berarti mereka tidak menyertakan perintah bash dalam image docker. Jadi saya rasa Anda tidak akan bisa terhubung ke sana dengan shell.

Apakah /bin/sh berhasil?

Jika dockernya open source, Anda mungkin bisa melihat program apa saja yang ada di path /bin dan menjalankannya sebagai perintah menggunakan execute console.

Tidak ada konsol yang berfungsi. Saya tidak yakin apakah ada cara untuk menambahkannya.

Inilah masalahnya: untuk menjalankan perintah di dalam container, perintah tersebut harus ADA di dalam image container. Jika image Anda TIDAK memiliki shell, tidak ada yang bisa Anda eksekusi.

Sekarang, Anda mungkin bisa MENAMBAHKAN shell, tetapi itu membutuhkan pengetahuan tentang BAGAIMANA image tersebut dibangun. Untungnya, ini adalah build open source. Berikut Dockerfile-nya:

Dari sini, saya bisa melihat bahwa image ini dibangun di atas Alpine Linux. JADI, buat Dockerfile yang menggunakan image Anda sebagai base, dan tambahkan bash ke dalamnya.
FROM vikunja/vikunja
RUN apk add --no-cache bash

Kemudian bangun image baru:
docker build newimage

Jika Anda menggunakan file docker-compose untuk menjalankan container Anda, Anda perlu mengubah image menjadi “newimage” (atau nama lain sesuai keinginan Anda). Setelah itu, Anda bisa mengeksekusi bash di dalam container.

3 Suka

OK. Terima kasih. Saya harus mencari tahu tentang hal itu. Hal ini membuat proses pembaruan jadi agak merepotkan. Mungkin saya akan bertanya di forum Vikunja (Vikunja) kenapa tidak ada shell. Saya sedang mencoba menjalankan perintah diagnostik.

Secara realistis, jika yang ingin Anda lakukan hanyalah debugging, maka menambahkan shell untuk itu bisa dianggap sebagai bagian dari proses debugging. Itu tidak harus permanen… setelah Anda mendapatkan informasinya, kembalilah ke image yang disediakan dan lanjutkan.

…tentu saja, Anda mungkin akan mengalami sesuatu yang sering saya alami: mengaktifkan debug justru memperbaiki masalahnya. :slight_smile: