Automatyczny start kontenerów dockera po restarcie serwera

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:

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?

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:

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

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

5

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

docker run -d --unless-stopped [...]
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:

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

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

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

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

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1