#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