Pomoc Pytanie laika dotyczące docker version

goruss

System Engineer
Q Specialist
20 Październik 2020
144
8
18
24
QNAP
null
Ethernet
null
Witam,
Czeka mnie przeniesienie swoich kontenerów na nowy serwer. Zazwyczaj korzystałem z docker compse znalezionych w internecie jak np. ten poniżej:
Kod:
version: '2'


volumes:
  nextcloud:


services:
  app:
    image: nextcloud
    restart: always
    ports:
      - 9090:80
    volumes:
      - nextcloud:/var/www/html
      - /share/nextcloud:/nextcloud
    network_mode: bridge
moje laickie pytanie dotyczy tego czym jest
Kod:
version: 2
?
Czy na nowym serwerze muszę dokładnie takiej samej kompozycji użyć? Jeśli nie, to jaką wersję wybrać?
 
No i się zaczęło...
Odtwarzam kontenery na nowym NAS i mam problem z komunikacją do bazy danych
Kod:
volumes:
  mariadb:
    driver: local


networks:
    db:
        driver: bridge


services:
  mariadb:
    image: mariadb:latest
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: *******
      MYSQL_USER:  dbuser
      MYSQL_PASSWORD: ***********
    expose:
        - "3308"
    ports:
        - "3308:3306"
    volumes:
     - mariadb:/var/lib/mysql
    networks:
      db:
              
  phpmyadmin:
    image: phpmyadmin
    restart: always
    expose:
      - "9010"
    ports:
      - "9010:80"
    environment:
      - PMA_HOST=mariadb
      - PMA_PORT=3306
    networks:
      db:
Tworzy mi się aplikacja z dwoma kontenerami, które się komunikują pomiędzy sobą po nazwie hosta w podsieci 172.29.0.0
Mogę zalogować się do PHPmyadmina przez port 9010 natomiast aplikacje z innych kontenerów i innych podsieci nie mogą skomunikować się z serwerem bazy danych - zawsze trzymuję komunikat jak poniżej

Kod:
An exception occurred in the driver: SQLSTATE[HY000] [2002] Connection timed out
Natomiast jeżeli aplikację utworzę dodając parametr
Kod:
network_mode: bridge
to wtedy kontenery otrzymują IP z podsieci 10.0.3.0 i jest OK.
W poprzednim serwerze Qnap TS-131K wszystko działało jak należy, a tu na TD-543D taki psikus.
Ktoś wie o co może chodzić?
 
odpal stacka i niech bangla sobie w tle docker compose up -d
a potem popatrz na wynik docker ps i popatrz czy porty są przekierowane
Połączono posty:

no i expose to tylko informacja
do wciągnięcia portów z kontenera służy sekcja ports
 
Wydaje się, że są przekierowane
Kod:
f19d1c7e8d25   mariadb:latest                  "docker-entrypoint.s…"   34 seconds ago   Up 33 seconds   3308/tcp, 0.0.0.0:3308->3306/tcp                                         database-mariadb-1
20416b1aead7   phpmyadmin                      "/docker-entrypoint.…"   34 seconds ago   Up 33 seconds   9010/tcp, 0.0.0.0:9010->80/tcp
 
noo
port 3308 gada z mariadb (patrzymy ze strony QNAPa) na porcie 3306
a port 9010 gada z PMA na porcie 80

w PMA ustawiasz port 3306 jako port do komunikacji, jako host wpisujesz mariadb i tyle

i zastanów się czy chcesz zawsze mięć ostatnią wersję mariadb (latest), lepiej przypiąć sie do konkretnej wersji ;)
 
Tak jak najbardziej port 9010 gada z PMA i mogę się zalogować do PMA poprzez http://192.168.10.10:9010 natomiast aplikacje i z innych kontenerów nie mogą się połączyć do serwera bazy danych gdzie jako host bazy danych wpisane mają 192.168.10.10:3308. Niby komunikacja jakaś następuje, ale strasznie długo to trwa po czy następuje komunikat
Kod:
An exception occurred in the driver: SQLSTATE[HY000] [2002] Connection timed out
Natomiast jeżeli w w portainerze zrobię Join Network Bridge to wtedy kontener znajduje się w podsieci 10.3.0.0 i zaczyna działa komunikacja z serwerem bazy danych.
 
Nie chciałbym zamykać wszystkiego w jednej sieci i paczce. Wydaje się, że nie ma routingu pomiędzy podsieciami i stąd brak komunikacji. Jestem laikiem w temacie dokerów i nie wiem jak wymusić taki routing. Natomiast jak pisałem wyżej na poprzednim serwerze to wszystko działało tzn. prawdopodobnie przy tworzeniu nowej podsieci automatycznie tworzył się routing do pozostałych podsieci.
Połączono posty:

Na ten moment żeby przyspieszyć dołączyłem do istniejącej sieci dodając do składni compose
Kod:
networks:
  default:
    name: database_default
    external: true
i zadziałało także po nazwie hosta.
 

Użytkownicy znaleźli tą stronę używając tych słów:

  1. ssh restart