Permasalahan Utama

Di salah satu project nodejs, saya bisa menggunakan ENVIRONMENT untuk “meng-inject” ENVIRONMENT variabel lewat docker-compose.

Saat ada update ENVIRONMENT harusnya, docker stack deploy -c docker-compose.yml namaservice saja sudah cukup, tapi ternyata tidak…

Hal itu ternyata berlaku hanya untuk container yang sedang berjalan (busy), sedangkan yang idle malah tidak terupdate sama sekali ENVIRONMENT nya.


Contoh Sederhana

Saya punya sebuah image docker project nodejs yang ENVIRONMENT nya bisa ditambahkan lewat docker-compose file

version: "3.7"

services:

  nodejs:
    image: ghcr.io/ipang/nodejs

    environment:
      #saya tambahkan 1 environment via docker-compose
      IS_MAINTENANCE: "true"
Hasil ‘docker service inspect service’

Hasil ‘docker service inspect service’

Akan saya keluarkan dari mode maintenance dengan mengganti “true” ke “false”

version: "3.7"

services:

  nodejs:
    image: ghcr.io/ipang/nodejs

    environment:
      #saya tambahkan 1 environment via docker-compose
      IS_MAINTENANCE: "false"

Solusi

  1. Untuk memperbaharui ENVIRONMENT di dalam container, jalankan
docker stack deploy -c docker-compose.yml namaservice
  1. Jalankan juga ini untuk “memaksa” container dalam docker-swarm memperbaharui ENVIRONMENT
docker service update --force --update-delay=10s --update-parallelism=1 namaservice