Ошибка IP-адресации с докером с помощью docker-compose

#docker #docker-compose #bridge

Вопрос:

Я смонтировал два одинаковых докера на двух виртуальных компьютерах ubuntu с помощью docker-compose. Проблема в том, что первый из них работает хорошо, и диалог между ним усиливается, а второй-нет. Я вижу, что ip-адрес, установленный по умолчанию в 1/, равен 172.X.X.X, а в 2 / — 192.X.X.X. Я нахожусь на virgin vps, без определенного файла конфигурации … но я не вижу, как это возможно. Вот докер-составьте

 version: '2.4'
services:
  redis:
    image: redis:alpine



 db:
    image: mariadb:10.5
    working_dir: /application
    command: [mysqld, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci, --innodb-file-format=Barracuda, --innodb-large-prefix=1, --innodb-file-per-table=1]
    volumes:
      - pimcore-demo-database:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=ROOT
      - MYSQL_DATABASE=pimcore
      - MYSQL_USER=pimcore
      - MYSQL_PASSWORD=pimcore

  php:
    image: pimcore/pimcore:PHP8.0-apache
    volumes:
      - .:/var/www/html:cached
    ports:
     - 80:80
     - 443:443
    environment:
     - APACHE_DOCUMENT_ROOT=/var/www/html/public

  php-debug:
    image: pimcore/pimcore:PHP8.0-apache-debug
    volumes:
      - .:/var/www/html:cached
    ports:
     - 88:80
    environment:
      - PHP_IDE_CONFIG="serverName=localhost"
      - APACHE_DOCUMENT_ROOT=/var/www/html/public

volumes:
  pimcore-demo-database:
 

Заранее спасибо

Комментарии:

1. Почему важны конкретные IP — адреса? В общем, Docker сам назначит IP-адреса и организует все так, чтобы имена служб Compose можно было использовать в качестве имен хостов; обычно вам не нужно смотреть, какие именно адреса.

2. Действительно, проблема в том, что докер недоступен извне, и поэтому Php-модуль не может вести диалог с базой данных. Поэтому я сравниваю одни и те же установки на другом vps, и это то, что я заметил как разницу. Так почему же docker автоматически назначает недоступный ip-адрес?

Ответ №1:

Попробуйте добавить конфигурацию сети в свой файл yml, чтобы использовать определенные IP-адреса, например, следующие:

больше информации о https://docs.docker.com/compose/networking/#use-a-pre-existing-network

 version: '2.4'
services:
  redis:
    image: redis:alpine

 db:
    image: mariadb:10.5
    working_dir: /application
    command: [mysqld, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci, --innodb-file-format=Barracuda, --innodb-large-prefix=1, --innodb-file-per-table=1]
    volumes:
      - pimcore-demo-database:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=ROOT
      - MYSQL_DATABASE=pimcore
      - MYSQL_USER=pimcore
      - MYSQL_PASSWORD=pimcore
    networks:           # <-- Add this line
      - you_own_network # <-- Add this line

  php:
    image: pimcore/pimcore:PHP8.0-apache
    volumes:
      - .:/var/www/html:cached
    ports:
     - 80:80
     - 443:443
    environment:
     - APACHE_DOCUMENT_ROOT=/var/www/html/public
    networks:           # <-- Add this line
      - you_own_network # <-- Add this line

  php-debug:
    image: pimcore/pimcore:PHP8.0-apache-debug
    volumes:
      - .:/var/www/html:cached
    ports:
     - 88:80
    environment:
      - PHP_IDE_CONFIG="serverName=localhost"
      - APACHE_DOCUMENT_ROOT=/var/www/html/public
    networks:           # <-- Add this line
      - you_own_network # <-- Add this line

volumes:
  pimcore-demo-database:

networks:               # <-- Add this block
  you_own_network:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.123.123.0/24
 

Комментарии:

1. (Если вы назовете пользовательскую сеть default , она установит конфигурацию для сети, которую создает для вас Compose , и вам не нужно добавлять networks: блоки в каждую службу.)

2. К сожалению, это все еще не работает. Действительно, проблема в том, что докер недоступен извне, и поэтому Php-модуль не может вести диалог с базой данных. Поэтому я сравниваю одни и те же установки на другом vps, и это то, что я заметил как разницу. Так почему же docker автоматически назначает недоступный ip-адрес? Или почему по умолчанию мой докер недоступен?

Ответ №2:

Ок решение :

 sudo snap remove docker
sudo rm -R /var/lib/docker
sudo apt-get remove docker docker-engine docker.io
sudo apt-get update
https://doc.ubuntu-fr.org/docker
systemctl start docker