Anda dapat menyetel perintah max_fails dan fail_timeout dari nginx untuk menunjukkan bahwa nginx harus mencoba ulang x jumlah permintaan koneksi ke container sebelum gagal pada ketidaktersediaan server upstream. Anda dapat menyetel kedua angka ini sesuai infrastruktur Anda dan kecepatan seluruh penyiapan akan datang. Anda dapat membaca lebih banyak detail tentang bagian health check di URL di bawah ini: http://nginx.org/en/docs/http/load_balancing.html Berikut adalah kutipan dari http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server
Tepatnya file konfigurasi nginx Anda yang dimodifikasi harus seperti berikut (skrip ini mengasumsikan bahwa semua kontainer naik setidaknya 25 detik, jika tidak, silakan ubah fail_timeout atau max_fails di bawah bagian hulu): Catatan: Saya tidak uji skripnya sendiri, jadi Anda bisa mencobanya!
Selain itu, sesuai Catatan berikut dari buruh pelabuhan ( https://github.com/docker/docker.github.io/blob/master/compose/networking.md#update-containers ), terbukti bahwa logika coba lagi untuk memeriksa Kesehatan dari container lain bukanlah tanggung jawab buruh B / M dan sebaliknya container tersebut harus melakukan health check sendiri.
Cara konfigurasi docker hingga terhubung nginx + php + mysql 1. Buka repo git berikut ini https://github.com/IshtarStar/docker-compose-nginx-phpfpm simpan file yang penting berikut ini pada suatu folder - default.conf - docker-compose.yml buat folder src/index.php (isi terserah, bisa langung file koneksi) pada file docker-compose.xml ganti php 8 menjadi 7 2. pastikan docker compose sudah terinstall di komputer masuk ke terminal dengan mode root lalu ketikkan perintah docker-compose up prosess installasi nginx dan php akan dilakukan secara otomatis, setelah proses installasi selesai. kita dapat mengecek nginx dan php dengan cara masuk ke container php-fpm ketikkan perintah berikut ini docker ps docker exec -it <idCntainer> bash untuk installasi awal biasanya nano belum terinall ketikkan apt-get update apt-get install nano silahkan buat file dengan extensi php (terserah) atau file koneksi mysli dengan code berikut ini : <?php $servername = "db:3306"; //db = nama host mysql container, 3306 adalah port container $username = "root"; $password = "123456"; $dbname = "wp_db"; $conn = mysqli_connect($servername, $username, $password, $dbname); if (!$conn) { die("Connection failed: " . mysqli_connect_error()); }else{ echo "koneksi suskes"; } echo "<br>"; /* $sql = "SELECT *from barang"; $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) { while($row = mysqli_fetch_assoc($result)) { echo $row["nama"]."<br>"; } } else { echo "0 results"; } */ //mysqli_close($conn); echo "<br>"; //phpinfo(); ?> simpan, dan buka url berikut ini pada browser http://localhost:8080/koneksi.php apabila ada peringatan koneksi error. itu wajar karena kita belum melakukan installasi mysql docker 3. Installasi mysql docker pada tab terminal masuk dengan mode root lalu ketikkan perintah berikut ini : docker run --name db -e MYSQL_ROOT_PASSWORD=123456 -d mysql setelah proses installasi selesai, kita masuk ke dalam container mysql untuk membuat database mysql docker exec -it db mysql -u root -p create database wp_db; oke. sekarang database sudah selesai dibuat. sekarang kita coba buka kembali alamat ini di browser http://localhost:8080/koneksi.php Nah kok masih error? eit tenang, kita belum membuat network dari docker 4. Membuat network pada docker. oke jadi kita masih perlu membuat network atau koneksi pada docker. intinya kita masih harus menguhungkan ketiga container. docker network create net-wp NB : net-wp adalah nama network, nama network bersifat bebas docker network connect net-wp db docker network connect net-wp docker_web_1 docker network connect net-wp docker_php-fpm_1 NB : db, docker_web_1, docker_php-fpm_1 adalah nama container untuk mengecek network docker dapat dilakukan dengan perintah berikut ini docker network inspect net-wp restart kembali semua container. dan jalankan kembali docker-compose up lalu buka kembali alamat http://localhost:8080/koneksi.php seharusnya koneksi.php sudah sukses terjadi. ------------------------------------------------------------------------------------------------------------------------- Catatan perintah pada docker : docker pull docker run docker run --options docker stop docker start docker ps docker exec -it docker logs ------------- docker images unt melihat images yang sudah terinstall di docker (belum ada di container) docker run redis unt menjalankan container + images docker ps unt melihat docker yang berjalan docker run redis -d unt menjalankan docker + images dg mode lepas docker stop <idContainer>6d442dc503cb untuk menghentikan container yang berjalan docker ps -a untuk melihat container yang sudah exist mungkin (berhenti) docker run -d redis:5.0 untuk menjalankan images dg versi tertentu. (akan download terlebih dahulu apabila tidak berjlan) docker run -p 6000:6379 -d redis untuk menjalankan container dg binding port Host dg Port bawaan images 6000 = port host 6379 = port default images redis =============================== printah Troubleshoot docker docker logs <idContainer> untuk melihat logs dari container sama dengan docker logs <namaContainer> docker logs -f <namaContainer> untuk mengecek logs terakhir pada container docker run -d -p 6000:6379 --name redis_jadul redis:5.0 untuk mensetting nama pada container docker exec -it <idContainer> bash untuk masuk ke dalam container hostname pwd dll env unt melihat environtment di dalam container exit untuk keluar dari container docker run -d \ -p 5432:5432 \ --name todo-postgres \ -e POSTGRES_USER=postgres \ -e POSTGRES_PASSWORD=rahasia \ -e POSTGRES_DB=belajar \ -v $(pwd)/postgres/init.sql:/docker-entrypoint-initdb.d/init.sql \ postgres netstat -nlp | grep 8080 kill PID You have to remove (or rename) that container to be able to reuse that name docker ps -a docker rm name_of_the_docker_container docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.4-cli php docker run --name mynginx -p 8080:80 -v "$PWD":/usr/share/nginx/html:ro -d nginx docker run --name some-nginx -p 8080:80 -v ~/site-content:/usr/share/nginx/html:ro -d nginx docker run -p 8080:80 -v $(pwd):/usr/share/nginx/html nginx docker run -it --rm -d -p 8080:80 -v ~/site-content:/usr/share/nginx/html nginx docker run -p 8080:80 -v $(pwd):/usr/share/nginx/html nginx docker run -p 8080:80 -v ~/site-content:/app ~/site-content:/var/log/nginx:/var/log/nginx nginx docker run -it --rm --name my-running-script -p 8001:80 -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.4-cli php hello.php untuk mendapatkan IP docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 1f0ccad7f303 docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq) untuk melihat servic yang aktif di dalam container service --status-all untuk setting ssh user login https://www.youtube.com/watch?v=GicWz2OF0sk https://phoenixnap.com/kb/how-to-ssh-into-docker-container https://stackoverflow.com/questions/22499443/why-the-sshd-service-is-unrecognized docker exec -it 494aa867466b /bin/bash docker exec -it 233c93e5153a /bin/sh docker exec -u 0 -it 494aa867466b bash untuk masuk ke dalam kontainer belajar docker https://rizkimufrizal.github.io/belajar-docker/ https://github.com/GrzegorzBGda/clean-docker-php stop dan start container docker build -t nginx_webserver . ------------------------------------ https://www.youtube.com/watch?v=wjEv6Kj6yRw&t=3s networking docker run --name wp -p 3035:80 -d wordpress docker run --name db -e MYSQL_ROOT_PASSWORD=123456 -d mysql docker exec -it db mysql -u root -p create database wp_db; docker network create net-wp docker network ls docker network connect net-wp db docker network connect net-wp wp docker network inspect net-wp docker network rm 2a714f6a59b2 docker network rm net-wp docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx docker run --name some-nginx -p 8080:80 -v ~/site-content:/usr/share/nginx/html -d nginx docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.4-cli php your-script.php kode untuk Dockerfile docker build -t nginx_webserver . netstat -nlp | grep 8080 kill PID cara membuat container dari images docker run --name mynginx1 -p 8080:80 -d nginx it work docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.4-cli php it work docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.4-fpm php catatan nginx + php + mysql 1) https://github.com/IshtarStar/docker-compose-nginx-phpfpm buat docker-compose.yml buat default.conf buat folder src/index.php (isi terserah, bisa langung file koneksi) ganti php 8 menjadi 7 install images https://hub.docker.com/_/mysql https://hub.docker.com/_/php docker file : FROM php:7.4-fpm RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) gd jalankan docker compose up lalu masuk ke container php dan install file berikut docker-php-ext-install mysqli docker-php-ext-enable mysqli matikan docker-compose dan jalankan lagi lihat di phpinfo seharusnya mysqli sudah muncul cek di phpinfo() apakh mysqli sudah terinsall jalankan images mysql menjadi container lalu buat databasesnya (masuk ke container) file koneksi.php host : nama container misal (db) user : root pwd : misal 12345 db : database yang kita buat (opsional) apabila masih muncul pesan error Warning: mysqli_connect(): php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution buat netwrok yang mencangkup ketiga(semua container) seharusnya docker sudah bisa mengakses database -------------------------------- docker stop namaContainer docker start namaContainer docker restart namaContainer -------------------------------- restart all container (waspada) docker restart $(docker ps -a -q) Perintah Berbahaya, peringatan!!!. docker rm -vf $(docker ps -aq) hapus semua container docker rmi -f $(docker images -aq) untuk remove semua images install ulang docker-compose rm /usr/local/bin/docker-compose sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/bin/docker-compose |