Menyambungkan Terminal ke container Docker yang sedang berjalan sangat membantu ketika ingin melihat apa yang terjadi di dalam container. Jika container Docker tidak berfungsi seperti yang diharapkan, Anda dapat attach container atau membuka shell ke container dan menjalankan perintah seperti ps atau top. Anda juga dapat memasukkan container, menginstal paket baru, dan mem-build image Docker baru dari dalam shell.

Dalam tutorial ini, kami akan menjelaskan cara attach (melampirkan) ke proses utama container dan cara membuka shell ke container yang sedang berjalan.

Attach ke container

Meskipun dimungkinkan untuk menjalankan banyak proses dalam sebuah container, kebanyakan docker hanya menjalankan satu proses tunggal. Perintah yang dijalankan saat memulai sebuah container ditentukan menggunakan instruksi ENTRYPOINT dan / atau RUN .

Perintah docker attach memungkinkan Anda untuk melampirkan terminal ke containeryang sedang berjalan. Ini berguna ketika ingin melihat apa yang tertulis dalam output standar secara real-time, atau untuk mengontrol proses secara interaktif.

Untuk lebih memahami cara kerja perintah attach mari kita jalankan container Nginx baru menggunakan image dari Nginx resmi.

docker container run --name proyek_nginx -d -p 8080:80 nginx

Opsi -p 8080:80 memberitahu Docker untuk bind port 8080 dari container ke port 80 pada mesin host.

Lihat daftar container pada mesin untuk memastikan container “proyek_nginx” berjalan:

docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
8e1c4971a7d8        nginx               "nginx -g 'daemon of…"   3 minutes ago       Up 2 seconds        0.0.0.0:8080->80/tcp   proyek_nginx

Attach container dengan menggunakan ID atau nama container:

docker container attach proyek_nginx

Buka 127.0.0.1:8080 di browser dan Anda dapat, melihat output dari proses nginx secara real time.

192.168.33.1 - - [04/Oct/2019:00:12:28 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-"
192.168.33.1 - - [04/Oct/2019:00:12:28 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.33.57:8080/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-"

Untuk mendapatkan akses ke log container Anda, sebaiknya menggunakan perintah docker logs.

Untuk detach dari container tanpa menghentikannya, gunakan kombinasi tombol CTRL-p CTRL-q. Jika menekan CTRL-c maka akan menghentikan container.

Jika proses yang berjalan yang Anda attach menerima input, Anda dapat mengirim instruksi padanya.

Membuka Shell ke Container

Perintah docker exec memungkinkan Anda untuk menjalankan perintah di dalam container yang berjalan.

Untuk melihat bagaimana perintah exec bekerja dan bagaimana ia dapat digunakan untuk memasukkan shell container, pertama-tama, mulailah sebuah container baru. Kami akan menggunakan image MySQL resmi:

docker container run --name proyek_mysql -d mysql

Perintah diatas akan membuat container bernama “proyek_mysql”.

Untuk menjalankan perintah di dalam container, jalankan perintah berikut:

docker container exec -it proyek_mysql ls /var

Opsi -i singkatan interactive, dan -t akan memberitahu Docker untuk mengalokasikan pseudo TTY device. Perintah ls akan mencantumkan semua file dan direktori di dalam direktori/var di container:

backups  cache	lib  local  lock  log  mail  opt  run  spool  tmp

Untuk mendapatkan shell ke container tertentu mis., Untuk masuk ke dalam container, mulailah sesi shell baru dengan mengeksekusi binary shell. Anda dapat menggunakan sh, bash, atau shell lain yang terdapat dalam image.

Perintah di bawah ini akan membuat sesi Bash baru di dalam container:

docker container exec -it proyek_mysql /bin/bash

Command Prompt akan berubah, yang menunjukkan bahwa Anda sedang bekerja pada shell container .

Dari sini, Anda dapat menjalankan perintah dengan cara yang sama seperti yang Anda lakukan pada server Linux lainnya. Misalnya, untuk mendapatkan daftar environment variables saat ini ketik env:

env

Outputnya akan terlihat seperti ini:

HOSTNAME=e0876a97e0fe
MYSQL_ROOT_PASSWORD=Pa$$w0rd_mySQL
PWD=/
HOME=/root
MYSQL_MAJOR=8.0
GOSU_VERSION=1.7
MYSQL_VERSION=8.0.17-1debian9
TERM=xterm
SHLVL=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
_=/usr/bin/env

Kesimpulan

Perintah docker exec dan docker attach memungkinkan Anda untuk terhubung ke container yang sedang berjalan. Untuk mendapatkan shell interaktif ke suatu container, gunakan perintah exec untuk memulai sesi shell baru. Perintah attach akan melampirkan terminal Anda ke container yang sedang berjalan.