Почему я получаю сообщение "ERR_CONNECTION_REFUSED" при запросе серверной частью, размещенной на sidecar, в службе приложений Azure?
Я пытаюсь развернуть довольно простое веб-приложение в службе приложений Azure. У меня есть серверный образ (под управлением django + graphql) и внешний образ (под управлением vue + apollo), и когда я запускаю их локально либо отдельно, либо через docker-compose, это работает без проблем.
Как только я развертываю приложение в Azure App Service, используя интерфейс в качестве основного контейнера, а серверную часть в качестве вспомогательной, я получаю сообщение "ERR_CONNECTION_REFUSED", когда Apollo запрашивает graphql api в серверной части.
Apollo-конфигурация
import {
ApolloClient,
InMemoryCache,
} from "@apollo/client/core";
import { createApolloProvider } from "@vue/apollo-option";
import createUploadLink from "apollo-upload-client/createUploadLink.mjs";
const httpLink = createUploadLink({
uri: "http://localhost:8080/graphql",
});
// Cache implementation
const cache = new InMemoryCache();
// Create the apollo client
export const apolloClient = new ApolloClient({
link: httpLink,
cache,
});
export const ApolloProvider = createApolloProvider({
defaultClient: apolloClient,
});
Docker compose
services:
backend:
container_name: backend
build:
context: ./backend
ports:
- "8080:8080"
frontend:
container_name: vue_frontend
build:
context: ./vue
ports:
- "80:80"
Файл dockerfile внешнего интерфейса
FROM node:22.14-alpine
RUN npm install -g http-server
WORKDIR /vue
COPY package*.json ./
COPY .npmrc .npmrc
RUN --mount=type=secret,id=npmrc,target=.npmrc npm install
COPY . .
EXPOSE 80 8080
CMD ["npm", "run", "dev", "--", "--port", "80", "--host"]
Серверный файл dockerfile
FROM python:3.10-slim
RUN mkdir /backend
WORKDIR /backend
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED = 1
RUN pip install --upgrade pip --trusted-host pypi.org
COPY requirements.txt /backend/
RUN apt-get update && \
apt-get install -y libpq-dev gcc
RUN pip install --no-cache-dir -r requirements.txt --trusted-host pypi.org
COPY . /backend/
EXPOSE 8080 80
CMD ["daphne", "-b", "0.0.0.0", "-p", "8080", "backend.asgi:application"]
Единственное, что до сих пор "работало", - это запуск серверной части локально, и тогда приложение будет получать данные. Это говорит о том, что я на самом деле запрашиваю веб-сайт с кодом apollo, а не что-либо на сетевом хосте.
Из документации: localhost:<port> должно быть достаточно
Я пробовал указывать разные адреса в uri в apollo-config, но если я попробую вместо этого "localhost:8000", я просто получу сообщение об ошибке, что схема localhost не поддерживается.
И если я попробую "<app-url>/graphql", я просто получу 404