Menambahkan/Edit Entrypoint pada Docker Container Existing

Posted by

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 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.