У меня есть в моем докере:

  • php-5.6-apache - Apache и php
  • drizzt / docker-unoconv-web service - веб-сервис, который создает PDF из документов Libre Office
  • оба контейнера используют сеть my-network

Создание pfs прекрасно работает из оболочки:

Curl --form file=@/var/xxx/documents/output-odt/test.odt http: // localhost : 3000 / unoconv / pdf> /var/xxx/documents/output-odt/test.pdf

Но localhost не распознается должным образом, когда он вызывается из моего контейнера php-5.6-apache.

Он работает с php, когда я использую IP-адрес проверенного контейнера, например. http://172.18.0.4:3000. Но это не лучшее решение, потому что IP-адрес меняется при перезапуске сервера.

Вопросов:

  • Как я могу позвонить веб-сервиса в Докер ?
  • Что следует использовать вместо localhost?
  • Или как я могу указать URL контейнера?
  • Или как я могу обратиться к моей сети?

Благодарность

-2
Honza 27 Ноя 2019 в 16:58
Если вы используете Docker Compose, Networking in Compose в документации Docker описывает стандартную настройку. . Если нет, все равно прочтите эту страницу, а затем сопоставьте ее концепции с тем, что описано в Использовать мостовые сети Особенно там, где описываются "определяемые пользователем мосты".
 – 
David Maze
27 Ноя 2019 в 17:29
Я уже использую одну и ту же сеть докеров в обоих контейнерах. Проблема возникает при вызове с php (связь внутри докера). localhost здесь не работает. И IP-адрес докера - не лучшее решение.
 – 
Honza
27 Ноя 2019 в 18:37

2 ответа

Как я могу позвонить веб-сервиса в Докер ?

Путем публикации порта контейнеров на машинах, которые используют этот порт.

Обычно это делается с docker run -p, но я не уверен с вашей настройкой

Что следует использовать вместо localhost?

0.0.0.0 (это то же самое, что localhost, но включает все интерфейсы на вашей машине)

Или как я могу обратиться к моей сети?

Вы можете попытаться предоставить своим контейнерам доступ к хост-сети: https: // docs .docker.com / network / network-tutorial-host /.

-1
wotanii 27 Ноя 2019 в 17:32
Спасибо за Ваш ответ. Пользуюсь портами. sudo docker run -d -p 3000: 3000 \ --name unoconv \ --net my-network \ --mount type = bind, source = "/ usr / share / fonts", target = / usr / share / fonts \ --restart except-Stop \ zrrrzzt / docker-unoconv-webservice 0.0.0.0, к сожалению, не помог. сеть хоста не принимает порты. Так что это не решение.
 – 
Honza
28 Ноя 2019 в 16:03
"Контейнеры": { "1c8756fc6afdd431f0ef9701950f662d5f8ba5c3a30f4073194c3ce2c69705c8": { "Имя": "unoconv", "EndpointID": "09af921e7097565b3fd46a9abdb3ae470e3429a93ea55a29a545dcfbb8cf1ed0", "MacAddress": "02: 42: AC: 12: 00: 05", "IPv4-адрес": «172,18 .0.5 / 16 "," IPv6Address ":" "}, он запускается при использовании 172.18.0.5 из php: curl --form file=@/var/xxx/documents/output-odt/test.odt 172.18.0.5:3000/unoconv/pdf> /var/xxx/documents/output-odt/test.pdf
 – 
Honza
28 Ноя 2019 в 16:05

Теперь я знаю, в чем проблема: D

Эта команда работает только при вызове из другого контейнера. В моем случае от php. Он не работает из оболочки ОС, и поэтому я запутался:

Curl --form file=@/var/xxx/documents/output-odt/test.odt http: // unoconv : 3000 / unoconv / pdf> /var/xxx/documents/output-odt/test.pdf

Эта команда работает только при вызове из оболочки ОС: curl --form file=@/var/xxx/documents/output-odt/test.odt http: // localhost : 3000 / unoconv / pdf> /var/xxx/documents/output-odt/test.pdf

Спасибо за помощь

-1
Honza 28 Ноя 2019 в 17:21