alex5e
@alex5e

Как правильно настроить docker контейнеры для корректной работы curl в php?

Есть docker-compose, в котором nginx и phpнаходятся в отдельный контейнерах

version: '3'

services:

    php:
        build:
            context: ./docker/php
        ports:
            - ${PORT_PHP}:9000
        volumes:
            - ${PATH_PROJECT}:/srv/www/promo
            - ${PATH_STATIC}:/srv/www/promo-static
            - ./docker/php/www.conf:/usr/local/etc/php-fpm.d/www.conf
            - ./docker/php/custom.ini:/usr/local/etc/php/conf.d/custom.ini
        environment:
            MYSQL_USER: ${MYSQL_USER}
            MYSQL_PASSWORD: ${MYSQL_PASSWORD}

    nginx:
        image: nginx:1.13.8
        ports:
            - ${PORT_NGINX}:80
        volumes:
            - ${PATH_PROJECT}:/srv/www/promo
            - ${PATH_STATIC}:/srv/www/promo-static
            - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
        depends_on:
            - php
        environment:
            NGINX_HOST: ${NGINX_HOST}
            PORT_PHP: ${PORT_PHP}

    mysql:
        image: mysql:5.7
        ports:
            - ${PORT_MYSQL}:3306
        depends_on:
            - php
        environment:
            MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
            MYSQL_DATABASE: ${MYSQL_DATABASE}
            MYSQL_USER: ${MYSQL_USER}
            MYSQL_PASSWORD: ${MYSQL_PASSWORD}

В /system32/drivers/etc/hosts
127.0.0.1 promo.mdtest.org

В .env
...
PORT_PHP=9002
PORT_NGINX=8002
PORT_MYSQL=3308


promo.mdtest.org:8002/promo-static/build/css/compo... открывается в браузере, но не открывается при помощи curl в php скрипте.
Запрос через curl работает только при указании в php скрипте $_SERVER['SERVER_ADDR'] (172.19.0.4) вместо $_SERVER['HTTP_HOST'] (promo.mdtest.org:8002)

Как настроить docker-compose, чтобы curl работал аналогично браузеру?
  • Вопрос задан
  • 401 просмотр
Пригласить эксперта
Ответы на вопрос 1
ivankomolin
@ivankomolin
Дело не в docker-compose.
При открытии страницы сайта promo.mdtest.org через браузер вы используете резолвинг адресов на хосте.
При открытии страницы сайта promo.mdtest.org через контейнер php вы используете резолвинг адресов в контейнере php.

Если хотите получать одинаковые результаты, необходимо чтобы внутри контейнера тоже был доступ к этому сайту.

Т.к. docker-compose при запуске создает сеть для всех указанных контейнеров, то доступ к этому сайту внутри контейнера можно получить, например так:
curl nginx -H 'Host: promo.mdtest.org'
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы