В конфигурации проекта я указываю hostname для MySQLi подключения. Подключение к БД происходит корректно, только если в качестве hostname указан непосредственный IP mysql контейнера. Если указать имя контейнера или алиас- то не работает. Почему только по IP контейнера работает? Это можно как то исправить? Или это вопросы не к докеру, а к фреймворку?
Несите манифесты
Что это?
докерфайлы, docker-compose.yml, команды…
mysql: image: mysql:8.0 container_name: mysql restart: always volumes: - ./Docker/mysql/data:/var/lib/mysql environment: MYSQL_DATABASE: cip MYSQL_ROOT_PASSWORD: password networks: php: aliases: - db php: build: context: . dockerfile: Docker/php/Dockerfile container_name: php restart: always volumes: - ./:/var/www/CIP depends_on: - mysql networks: - php Php dockerfile: FROM php:8.0-fpm RUN apt-get update && apt-get install -y zip \ && docker-php-ext-install pdo_mysql \ && docker-php-ext-install mysqli RUN apt-get install -y libicu-dev RUN docker-php-ext-install intl RUN docker-php-ext-configure intl # Get composer COPY --from=composer:2.0.8 /usr/bin/composer /usr/local/bin/composer CMD ["php-fpm"] COPY ./ /var/www/CIP ARG USER_ID=1000 ARG GROUP_ID=1000 RUN usermod -u $USER_ID www-data && \ groupmod -g $GROUP_ID www-data && \ chown -R www-data:www-data /var/www/CIP .env: #-------------------------------------------------------------------- # DATABASE #-------------------------------------------------------------------- database.default.hostname=db database.default.database=cip database.default.username=root database.default.password=password database.default.DBDriver=MySQLi
compose явно не полный
version: "3" networks: php: services: nginx: image: library/nginx:1.14-alpine container_name: nginx restart: always ports: - "60:80" volumes: - ./:/var/www/CIP - ./Docker/nginx/conf.d:/etc/nginx/conf.d - ./Docker/nginx/log:/var/log/nginx depends_on: - php - mysql networks: - php mysql: image: mysql:8.0 container_name: mysql restart: always volumes: - ./Docker/mysql/data:/var/lib/mysql environment: MYSQL_DATABASE: cip MYSQL_ROOT_PASSWORD: password networks: php: aliases: - db php: build: context: . dockerfile: Docker/php/Dockerfile container_name: php restart: always volumes: - ./:/var/www/CIP depends_on: - mysql networks: - php
На mysql network не указан
networks: php: aliases: - db Это разве не сеть? Или в синтаксисе ошибка/и?
Да не, все по спецификации
Просмотрел, с телефона не удобно, извиняюсь. Пока чисто предположение что сеть просто не описана services: # ... networks: Php: name: php И не понял зачем aliases в сеть воткнута? Или у меня разметка съехала?
а где нужно указывать aliases?
Для чего ты хочешь указать алиас?
ну если по названию контейнера не работает, то думал может через алиас.
слушай, а скинь плз результаты docker inspect для них, вдруг там что. я просто в упор никаких ляпсусов не вижу
с сетью или без?
давай как было изначально, эта схема должна работать. заодно, скажи, на какой системе и как запускаешь докер
ну это однако links и оно выше должно быть, не внутри секции нетворкс
не, я чекнул по референсу - все норм
Тогда пока х3
Ладно, а как именно не работает коннект по алиасу? Резолв не проходит, или таймаут, или как? Что если nslookup попробовать подергать? На бридже тцпдампом трафик половить
при попытке накатить миграции получаю ошибку: Unable to connect to the database. Main connection [MySQLi]: php_network_getaddresses: getaddrinfo failed: Name or service not known
доступность самого имени проверял? ping или nslookup у тебя не коннектится пхп или вообще имя не резолвится?
php контейнер пингует mysql. Сама БД работает напрямую через контейнер. Может какая то проблема во фреймворке. Хотя в методе подключения описано, что в качестве hostname может быть указано либо имя либо адрес.
Он у тебя раз дергает getaddrbyhost, то точно не ждёт только айпишника
Обсуждают сегодня