Может пинговать, но не видеть между контейнерами Docker - PullRequest
0 голосов
/ 03 декабря 2018

Я использую docker-compose для настройки NextJS-приложения, которое извлекает данные из REST-API Wordpress, работающего в отдельных контейнерах.

Проблема в том, что я получаю ECONNREFUSED, когда пытаюсь получить илиОтправьте wordpress-контейнер http://wordpress:8000 из NextJS-контейнера.Я могу без проблем пропинговать wordpress: 8000.

Если я использую Postman или пытаюсь получить REST-API с другого хоста (т.е. не с компьютера, на котором выполняется docker-compose), используя общедоступный ip, он работает отлично.

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

Кто-нибудь знает, кто может быть виновником?

Мой докер-compose.yml :

version: '2'
  services:
  db:
   image: mysql:5.7
   volumes:
     - db_data:/var/lib/mysql
   restart: always
   environment:
     MYSQL_ROOT_PASSWORD: ***REMOVED***
     MYSQL_DATABASE: ***REMOVED***
     MYSQL_USER: ***REMOVED***
     MYSQL_PASSWORD: ***REMOVED***
   networks:
     - back
   wordpress:
     depends_on:
     - db
     image: wordpress:latest
   volumes:
     - ./wp-content:/var/www/html/wp-content 
   ports:
     - "8000:80"
   restart: always
   environment:
     WORDPRESS_DB_HOST: db:3306
     WORDPRESS_DB_USER: root
     WORDPRESS_DB_PASSWORD: ***REMOVED****
   networks:
     - back
   phpmyadmin:
   depends_on:
     - db
   image: phpmyadmin/phpmyadmin
   restart: always
   ports: 
     - 8080:80
   environment:
     PMA_HOST: db
     MYSQL_ROOT_PASSWORD: ***REMOVED***
   networks:
     - back
   next-app:
     depends_on:
       - wordpress
   build:
     context: ./next-app
     dockerfile: Dockerfile
   volumes:
     - './next-app:/usr/src/app'
     - '/usr/src/app/node_modules'
   ports:
     - '80:3000'
   networks:
     - back
 express-server:
   build:
   context: ./express-server
   dockerfile: Dockerfile
   ports:
     - '3001:3001'
networks:
   back:
   driver: bridge
volumes:
   db_data:

1 Ответ

0 голосов
/ 03 декабря 2018

Внутри NextJS-контейнера вам нужно использовать порт 80.Порт 8000 это от вашего (хоста) компьютера.Поэтому используйте http://wordpress:80 внутри контейнеров докеров.


   ports:
     - "8000:80"

В вашем docker compose просто говорится: «Сопоставьте мой локальный (хост-порт) порт 8000 с контейнерами-портами 80», но внутри сети докера это все еще порт 80

Вы можете пинговать, потому что пинг не использует порты.Порты, о которых мы говорим, являются портами TCP / UDP, см. https://en.wikipedia.org/wiki/Port_(computer_networking). Но ping использует протокол ICMP (Internet Control Message Protocol), который вообще не использует порты, см. https://en.wikipedia.org/wiki/Ping_(networking_utility)

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