Ana içeriğe geç

Docker üzerinde Patrona Sorun Giderme

Docker, Patrona'yı çalıştırmanın birçok yönünü basitleştirir, ancak akılda tutulması gereken bazı tuzaklar vardır. Docker altında Patrona ile ilgili sorun yaşıyorsanız, aşağıdaki sorun giderme sürecini deneyin, ardından bulduğunuz belirli sorunla ilgili ayrıntılar için aşağıya bakın.

  1. Konteyner çalışıyor mu?
  2. Sunucu konteyner içinde çalışıyor mu?
  3. Patrona doğru uygulama veritabanını mı kullanıyor?
  4. Patrona portu üzerinden Docker ana makinesine bağlanabiliyor musunuz?
  5. Docker ana makinesinden konteynere bağlanabiliyor musunuz?
  6. Konteyner içinden sunucuya bağlanabiliyor musunuz?

Bu süreçte aşağıdaki komutları faydalı bulabilirsiniz. Patrona konteynerindeki kabuğa ulaşmak için:

docker exec -ti CONTAINER_NAME bash

Ve Patrona konteynerinin günlüklerini almak için:

docker logs -f CONTAINER_NAME

Patrona konteyneri sunucuyu başlatmadan çıkıyor

Bunu nasıl tespit edebilirim: Patrona konteynerinin şu anda çalışıp çalışmadığını görmek için docker ps komutunu çalıştırın. Eğer çalışıyorsa, bir sonraki adıma geçin.

Eğer docker ps çalışmayan konteyneri göstermiyorsa, durdurulmuş konteynerleri listelemek için şu komutu çalıştırın:

docker ps -a | grep patrona/patrona

En son çıkan konteyneri bulun ve konteyner kimliğini not edin. O konteynerin günlüklerine şu komutla bakın:

docker logs CONTAINER_ID

Patrona konteyneri çalışıyor ama sunucu çalışmıyor

Bunu nasıl tespit edebilirim: Konteynerin çalıştığından emin olmak için docker ps komutunu çalıştırın. Sunucu, Docker konteyner günlüklerine kaydediyor olmalıdır. Bunu kontrol etmek için şu komutu çalıştırın:

docker logs CONTAINER_NAME

Başlangıçta şu satırı görmelisiniz:

05-10 18:11:32 INFO patrona.util :: Patrona yükleniyor...

Daha aşağıda, sonunda şu satırı görmelisiniz:

05-10 18:12:30 INFO patrona.core :: Patrona Başlatma TAMAMLANDI

Eğer aşağıdaki satırları görüyorsanız:

05-15 19:07:11 INFO patrona.core :: Patrona Kapanıyor ...
05-15 19:07:11 INFO patrona.core :: Patrona Kapanma TAMAMLANDI

o zaman Patrona kendini kapatmış demektir.

Bunu nasıl düzeltebilirim: Uygulama veritabanına bağlanma hataları için Docker konteyner günlüklerini kontrol edin. Patrona'nın hala başlatılıp başlatılmadığını görmek için günlükleri izleyin; şu komut:

docker logs -f CONTAINER_ID

günlüklerin yazıldığı anda görmenizi sağlar.

Eğer konteyner başlatılmadan önce sonlandırılıyorsa, sorun konteyneri başlatmak için kullanılan orkestrasyon hizmetindeki bir sağlık kontrolü zaman aşımı olabilir, örneğin Docker Cloud.

Eğer konteyner dışarıdan sonlandırılmıyorsa, ancak yine de başlatılamıyorsa, bu sorun muhtemelen Docker'a özgü değildir. Eğer Patrona tarafından sağlanan bir görüntü kullanıyorsanız, lütfen GitHub sorunu açın.

Uzak uygulama veritabanına bağlanamıyor

Bunu nasıl tespit edebilirim: Eğer bu yeni bir Patrona örneğiyse, çevre değişkenleri aracılığıyla belirttiğiniz veritabanı boş olacaktır. Eğer bu mevcut bir Patrona örneği ve yanlış çevre parametreleri ile çalışıyorsa, sunucu uygulama verileri için kullanmak üzere yeni bir H2 gömülü veritabanı oluşturacak ve günlüklerde şu satırlara benzer satırlar göreceksiniz:

05-10 18:11:40 INFO patrona.core :: Patrona DB'yi kuruyor ve taşıyor. Lütfen bekleyin, bu biraz zaman alabilir...
05-10 18:11:40 INFO patrona.db :: h2 Veritabanı Bağlantısını Doğrulama ...

05-10 18:11:40 INFO patrona.db :: Veritabanı Bağlantısını Doğrulama ... ✅

Bunu nasıl düzeltebilirim: Çevre değişkenlerini Docker'a doğru şekilde geçirdiğinizden emin olun. Bir konteynerin çevre değişkenlerini listelemek için şu komutu kullanabilirsiniz:

docker inspect some-postgres -f '{{'{{ .Config.Env }}'}}'

Patrona sunucusu bir MySQL veya PostgreSQL veritabanına bağlanamıyor

Bunu nasıl tespit edebilirim: Docker konteynerinin günlükleri "Veritabanı Bağlantısını Doğrulama" satırından sonra bir hata mesajı döndürür.

Bunu nasıl düzeltebilirim: Çevre değişkenleri aracılığıyla geçirdiğiniz bağlantı dizesi parametreleriyle mysql veya psql komutunu kullanarak bağlanmayı deneyin. Eğer veritabanına bağlanamıyorsanız, sorun ya kimlik bilgileri ya da bağlantı ile ilgilidir. Kimlik bilgilerinin doğru olduğunu doğrulamak için, başka bir makineden o kimlik bilgileriyle giriş yapın ve ardından Docker konteynerini çalıştıran ana makineden aynı bağlantıyı yapmayı deneyin.

Bunu çalıştırmanın kolay bir yolu, veritabanınız için uygun istemciye sahip bir konteyner başlatmak için Docker'ı kullanmaktır. Postgres için bu şu şekilde görünecektir:

docker run --name postgres-client --rm -ti --entrypoint /bin/bash postgres

O konteynerin içinden, konteynerdeki istemci komutunu kullanarak veritabanı ana makinesine bağlanmayı deneyin, örneğin psql. Aynı ana makinedeki başka bir konteynerden bağlanabiliyorsanız, o zaman Patrona Docker konteynerinin içinden aynı bağlantıyı yapmayı deneyin:

docker exec -ti container-name bash

Ayrıca nc komutunu kullanarak veritabanı ana makinesine bağlanmayı deneyebilir ve bağlantının açılıp açılmadığını kontrol edebilirsiniz:

nc -v your-db-host 5432

Bu adımlar, sorunun ağ ile mi yoksa kimlik doğrulama ile mi ilgili olduğunu belirlemenize yardımcı olacaktır.

Patrona uygulama veritabanı kalıcı hale getirilemiyor

Bunu nasıl tespit edebilirim: Bu, uygulamayı her başlattığınızda Kurulum ekranını alıyorsanız meydana gelir. En yaygın neden, Docker konteynerine uygulama veritabanını koymak için kalıcı bir dosya sistemi bağlamaması vermemektir.

Bunu nasıl düzeltebilirim: Konteynere kalıcı bir hacim verdiğinizden emin olun.

Dahili port doğru şekilde yeniden eşlenmiyor

Bunu nasıl tespit edebilirim: docker ps komutunu çalıştırın ve port eşlemesini kontrol edin, ardından curl http://localhost:port-number-here/api/health komutunu çalıştırın. Bu, şu şekilde bir JSON yanıtı döndürmelidir:

{"status":"ok"}

Bunu nasıl düzeltebilirim: Patrona konteyner görüntüsünü başlatmak için kullandığınız docker run komutuna -p 3000:3000 veya benzeri bir port yeniden eşleme eklediğinizden emin olun.

Patrona bir dosyaya veya dizine yazamıyor veya okuyamıyor

Bunu nasıl tespit edebilirim: Günlüklerde bir IOError veya Java'dan "İzin reddedildi" veya org.sqlite.core.NativeDB._open_utf8 içeren SQLite hataları açıkça belirtilecektir.

Bunu nasıl düzeltebilirim: Patrona'yı çalıştıran kullanıcının dosyaya veya dizine okuma ve yazma iznine sahip olduğundan emin olun:

  • Patrona'yı yerel makinenizde veya sunucunuzda bir JAR dosyası olarak çalıştırıyorsanız, Java sürecini çalıştıran kullanıcıyı kontrol edin.
  • Patrona'yı Docker konteynerinden çalıştırıyorsanız, /patrona.db dizinini kullandığınızdan emin olun.

Patrona'yı herhangi bir Unix benzeri işletim sisteminde JAR'dan çalıştırıyorsanız, Patrona'yı hangi kullanıcının çalıştırdığını görmek için bir terminal açabilir ve ps -uA | grep patrona komutunu yazabilirsiniz.