Setelah saya berhasil melakukan expose port pada Docker Container Existing, akhirnya saya bisa mengakses tampilan dari webserver yang sudah disetup. Saya bisa akses dari PC lain dengan cara akses IP Host Docker Container (contoh : http://192.168.11.12:8080) dan muncullah tampilannya. Namun problem yang lain muncul ketika Host-nya mengalami reboot. Meskipun Containernya sudah disetup auto start, tapi service Apache2 yang sudah disetup pada Container tidak auto start. Alhasil, saya harus masuk terlebih dahulu pada Container tersebut dan menjalankan perintah start Apache2 (/etc/init.d/apache2 start). Setelah dijalankan, web server dapat diakses kembali dari PC lain.
Untuk mengatasi hal tersebut, saya dapat menambahkan atau edit Entrypoint. Entrypoint biasa digunakan untuk menyisipkan perintah atau eksekusi script yang dijalankan ketika Docker Container distart.
Agar service Apache2 pada Container otomatis start, saya membuat script execute untuk ditambahkan pada entrypoint. Pada contoh disini, saya memiliki Container dengan nama webserver.
– Masuk pada Docker Container
docker exec -it webserver bash
– Buat script execute didalam Docker Container
vi /services.sh
Isi dengan isian seperti berikut
#!/bin/bash /etc/init.d/apache2 start /bin/bash
– Berikan hak akses eksekusi pada script tersebut
chmod +x /services.sh
Simpan dan keluar dari Container. Untuk menambahkan atau edit Entrypoint pada Docker Container Existing, tahapannya sama seperti pada tulisan tips expose port pada Docker Container Existing.
– Dapatkan lokasi dari konfigurasi Container. Dalam contoh disini, saya cari HostnamePath
docker inspect id-container | grep HostnamePath
Berikut contoh hasilnya
"HostnamePath": "/var/lib/docker/containers/1e5f210c87a86547f95a5f64f25b93d85f944e1b5d110007451cbd86aeead90c/hostname",
– Stop service Docker
systemctl stop docker
– Masuk pada folder hasil inspect diatas (tanpa hostname)
cd /var/lib/docker/containers/1e5f210c87a86547f95a5f64f25b93d85f944e1b5d110007451cbd86aeead90c
– Backup file config.v2.json
cp config.v2.json backup-config.v2.json
– Buka file config.v2.json
vi config.v2.json
Cari tulisan Path dan Entrypoint. Kemudian sesuaikan isinya seperti berikut :
"Path":"/services.sh" "Entrypoint":["/services.sh"]
– Setelah selesai dimodifikasi, jalankan kembali service Dockernya dan start Container nya
systemctl start docker
docker start container-id
Berikut ini adalah tampilan sebelum dan sesudah dilakukan modifikasi.
Sebelum
root@lenovo:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1e5f210c87a8 ubuntu:18.04 "/bin/bash" 35 minutes ago Up 2 minutes 0.0.0.0:22->22/tcp, 0.0.0.0:8080->80/tcp webserver
Sesudah
root@lenovo:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1e5f210c87a8 ubuntu:18.04 "/services.sh" 5 hours ago Up 3 seconds 0.0.0.0:22->22/tcp, 0.0.0.0:8080->80/tcp webserver
Pada bagian COMMAND berubah dari “/bin/bash” menjadi “/services.sh”. Saya coba cek pada Docker Container untuk memastikan service Apache2 otomatis start
docker exec webserver ps -ax
Berikut hasilnya
root@lenovo:~# docker exec webserver ps -ax PID TTY STAT TIME COMMAND 1 pts/0 Ss 0:00 /bin/bash /services.sh 29 ? Ss 0:00 /usr/sbin/apache2 -k start 32 pts/0 S+ 0:00 /bin/bash 33 ? Sl 0:00 /usr/sbin/apache2 -k start 34 ? Sl 0:00 /usr/sbin/apache2 -k start
Terlihat service Apache2 sudah running. Saya coba testing akses via browser dan hasilnya dapat diakses
Silakan dicoba dan semoga bermanfaat 🙂