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.