Как подключиться к PHP контейнеру из себя, используя cURL? - PullRequest
0 голосов
/ 28 апреля 2020

Когда я пытаюсь подключиться к контейнеру, используя curl -v localhost, я получаю:

*   Trying 127.0.0.1:80...
* TCP_NODELAY set
* connect to 127.0.0.1 port 80 failed: Connection refused
*   Trying ::1:80...
* TCP_NODELAY set
* Immediate connect fail for ::1: Address not available
*   Trying ::1:80...
* TCP_NODELAY set
* Immediate connect fail for ::1: Address not available
* Failed to connect to localhost port 80: Connection refused
* Closing connection 0
curl: (7) Failed to connect to localhost port 80: Connection refused

Я упоминаю, что не хочу подключаться ни от контейнера к хосту, ни от хост к контейнеру (я мог только найти информацию об этих 2 случаях использования), но изнутри контейнера к самому контейнеру .

Вот мой docker -компонент .yml :

services:
  php:
    build:
      context: .
      dockerfile: docker/php/Dockerfile
    ports:
      - '8000:80'
    volumes:
      - ./app:/var/www/html

На всякий случай, я упоминаю, что я использую изображение php: 7.3-fpm-alpine .

Я также проверил с curl -v php (с именем контейнера), я получил:

*   Trying 172.18.0.5:80...
* TCP_NODELAY set
* connect to 172.18.0.5 port 80 failed: Connection refused
* Failed to connect to content_php port 80: Connection refused
* Closing connection 0
curl: (7) Failed to connect to content_php port 80: Connection refused

Пока ping php в порядке:

PING php (172.18.0.5): 56 data bytes
64 bytes from 172.18.0.5: seq=0 ttl=64 time=0.262 ms

Я также проверил, добавив EXPOSE: 80 в docker -compose.yml , я получил тот же результат.
Я также тестировал с curl localhost:8000, я получил тот же результат с портом 8000.

I заметил, с docker ps есть порт по умолчанию, установленный на 9000:

PORTS  
9000/tcp, 0.0.0.0:8000->80/tcp  

Когда я выполняю curl localhost:9000 и получаю:

curl: (56) Recv failure: Connection reset by peer

Чего мне не хватает, чтобы иметь возможность подключи к контейнеру из себя

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Вы должны иметь возможность использовать localhost при доступе к контейнеру из самого себя, как показано ниже:

Dockerfile:

FROM httpd:2.4
RUN apt-get update && apt-get install curl

А затем:

$ docker build -t temp .
$ docker run --detach --name temp temp
$ docker exec temp curl localhost
<html><body><h1>It works!</h1></body></html>

Попробуйте сделать это с вашим изображением, используя минимально возможную настройку, чтобы точно определить проблему. Также убедитесь, что ваше изображение доступно снаружи. Если он доступен с вашего хоста и недоступен из контейнера с помощью localhost, то его адрес конфигурации сервера bind или listen, вероятно, ограничивает его. Установите значение 0.0.0.0 или эквивалент «любого».

0 голосов
/ 28 апреля 2020

PHP -FPM должен быть доступен через контейнер Nginx, мы не можем получить к нему прямой доступ с помощью cURL.

Итак, в этом случае мне пришлось использовать Nginx имя контейнера в моей команде cURL из контейнера PHP для получения содержимого:

curl nginx
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...