Automatyczny start kontenerów dockera po restarcie serwera

Automatyczny start kontenerów dockera po restarcie serwera
S8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 40
0

Na serwerze VPS mam postawioną stronę www która składa się z bazy w mysql, frontu w react oraz backend w Javie
Całym ruchem steruje nginx który jest zainstalowany na serwerze. Pozostałe elementy są kontenerach dockera.
Ostatnio była awaria która spowodowała restart serwera i konieczność ręcznego uruchomienia kontenerów aby wszystko działało.
Chciałbym zmienić ustawienia aby kontenery same startowały po restarcie jednak nie wiem co zrobić z takim wpisem:

Kopiuj
location / {
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;

        proxy_pass http://172.18.0.5:3080;
}

w /etc/nginx/sites-available/default
adres 172.18.0.5 wskazuje na kontener reacta jednak po restarcie to IP może być inne.
w komunikacji między kontenerami używam Docker Network jednak w tym przypadku to nie zadziała.
Jedyna opcja jaka przychodzi mi do głowy to uruchomienie kontenera react i wystawienie go na jakimś porcie, ale może jest jakieś inne rozwiązanie aby react nie był widoczny na zewnątrz w taki sposób?

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3625
3

Dodaj docker-compose up w systemd.
Korzystaj z nazw kontenerów a nie losowo przydzielonych IP. To taki wewnętrzny system DNS.
Np. jak masz w docker compose:

Kopiuj
version: "3.9"
services:
  service:
    container_name: frontend
    build:
      context: ./
      dockerfile: ./

To powinno wystarczyć podać nazwę do komunikacji zamiast IP czyli frontend

Ferdynand Lipski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 77
5

Co do autostartu – zastosuj ustawienie unless-stopped. Domyślnie demon Dockera powinien sobie z tym poradzić po restarcie maszyny.

Kopiuj
docker run -d --unless-stopped [...]
Kopiuj
some-container:
  restart: unless-stopped
  [...]

W przypadku nginxa najłatwiej byłoby go także przenieść do kontenera Dockera. Wtedy możesz swobodnie operować nazwami kontenerów / nazwami w Compose.

szary88 napisał(a):

Jedyna opcja jaka przychodzi mi do głowy to uruchomienie kontenera react i wystawienie go na jakimś porcie, ale może jest jakieś inne rozwiązanie aby react nie był widoczny na zewnątrz w taki sposób?

Możesz opublikować kontener w sposób odpowiadający wyłącznie hostowi uruchamiającemu, jeżeli to masz na myśli:

Kopiuj
docker run -d -p 127.0.0.1:8080:80 [...]

W przypadku większego skomplikowania sprawy najprawdopodobniej może się nie obyć bez iptables.

S8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 40
0

Dziękuje wszystkim za odpowiedzi, użyłem rozwiązania które zaproponował @Ferdynand Lipski czyli uruchomiłem kontener w taki sposób aby był widoczny tylko przez hosta

Kopiuj
docker run -d -p 127.0.0.1:8080:80 [...]

jakoś wcześniej nie trafiłem na to rozwiązanie..

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.