Прокси WordPress от реагировать внутри докера - PullRequest
0 голосов
/ 19 июня 2019

Я создаю веб-приложение с созданием-реакции-приложения в качестве внешнего интерфейса и WordPress API в качестве внутреннего интерфейса. Я хочу использовать докер для бесшовного развертывания.

Все работает само по себе (я могу связаться с бэкэндом через почтальона), но веб-интерфейсу не удается связаться с бэкэндом, что приводит к следующей ошибке:

Proxy error: Could not proxy request /wp-json/wp/v2/pages from localhost:3000 to http://localhost:8000.

Вот мой докер-compose.yml:

version: '3'

services:
  # Database
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: xxx
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: xxx
    networks:
      - wpsite
  # phpmyadmin
  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin/phpmyadmin
    restart: always
    ports:
      - '8080:80'
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: xxx
    networks:
      - wpsite
  # Wordpress
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - '8000:80'
    restart: always
    volumes: ['./:/var/www/html']
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: xxx
    networks:
      - wpsite

  # frontend  
  frontend:
    volumes:
      - ./frontend/src:/usr/src/app/src
      - ./frontend/public:/usr/src/app/public
    command: npm run start
    build: ./frontend
    ports:
      - 3000:3000
    links:
      - wordpress
networks:
  wpsite:
volumes:
  db_data:

Вот внешний интерфейс Dockerfile:

FROM node:10-alpine

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY package.json /usr/src/app/

RUN npm install

ADD src /usr/src/app/src
ADD public /usr/src/app/public

RUN npm build

CMD [ "npm", "start" ]

и внешний пакет package.json:

{
  "name": "frontend",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "axios": "^0.19.0",
    "classnames": "^2.2.6",
    "node-sass": "^4.12.0",
    "react": "^16.8.6",
    "react-dom": "^16.8.6",
    "react-router-dom": "^5.0.1",
    "react-scripts": "3.0.1"
  },
  "scripts": {
    "start": "PORT=3000 react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "proxy": "http://localhost:8000"
}

Я полагаю, это как-то связано с контейнерами докеров, каждый из которых создает свой собственный 'localhost', поэтому порт 8000, который я пытаюсь использовать для прокси, не существует в области действия своего собственного контейнера?

Но я теряюсь в том, как ее решить, и буду очень признателен за любую помощь!

1 Ответ

0 голосов
/ 19 июня 2019

Так что вам нужно прочитать в сети docker-compose.Что происходит, так это то, что каждый контейнер является отдельным объектом в сети со своим собственным локальным хостом.Чтобы контейнеры могли взаимодействовать друг с другом, вы можете использовать соответствующие имена сервисов в качестве имен хостов - в вашем случае для доступа к сервису Wordpress из вашего внешнего интерфейса вы можете использовать https://wordpress:80/, например

Попробуйтезамена "proxy": "http://localhost:8000" на "proxy": "http://wordpress:80"

Определенные вами сопоставления портов предназначены для того, чтобы вы могли получить доступ к этим контейнерам из-за пределов виртуальной сети, созданной для вашего проекта создания докера.

Подробнее об этом здесь https://docs.docker.com/compose/networking/

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