Проблема с отображением следующей js страницы внутри кукловода внутри контейнера docker - PullRequest
0 голосов
/ 02 апреля 2020

Я предстану перед вами как последняя надежда. У меня есть проект, в котором я должен иметь возможность экспортировать страницу в файл PDF. Проект является следующим js сайтом, развернутым в docker рое.

Учитывая SSR / CSR следующего js, я решил использовать кукловод для рендеринга и экспорта страницы. Для этого я создал конечную точку POST, в которой URL и токен используются в качестве параметров, позволяющих визуализировать серверную часть страницы.

Код экспорта:

let cfg = {
    headless: true,
    args: ["--no-sandbox", "--disable-setuid-sandbox", "--disable-web-security"]
};

if (serverRuntimeConfig.chromiumPath != undefined) {
    cfg.executablePath = serverRuntimeConfig.chromiumPath
}

const browser = await puppeteer.launch(cfg);
const page = await browser.newPage();
page.on('console', msg => {
    for (let i = 0; i < msg.args().length; ++i)
        console.log(`${i}: ${msg.args()[i]}`);
});

await page.setCookie(...cookies)
await page.goto(query);
await page.waitFor(10000)
const pdf = await page.pdf({
    format: "A4",
    scale: 0.75,
    printBackground: true
});
await browser.close();
return pdf;

Как вы Как видите, моя страница требует аутентификации, поэтому я настроил повара ie с помощью кукловода.

Когда я использую это локально, проблем не возникает. Моя страница правильно загружена и экспортирована. Проблемы возникают при развертывании с использованием docker. Я console.loged проблема, я загружаю некоторые данные asyn c в хуке componentDidMount, и загрузка просто останавливается, когда я запускаю свой первый запрос для получения данных. Нет ошибок, ничего. Он просто останавливается.

async componentDidMount() {
    console.log("yeah");
    let ad = await apiCase.doRequest(...);
    console.log("re yeah");
}

Получил "да", а не "да".

Dockerfile (его часть)

FROM alpine:edge as prod

ENV PORT 80
EXPOSE 80

WORKDIR /app
COPY --from=prune-builder /src /app

RUN apk add --no-cache \
    chromium \
    nss \
    freetype \
    freetype-dev \
    harfbuzz \
    ca-certificates \
    ttf-freefont \
    nodejs \
    npm

CMD ["npm", "run", "prod"]

Любые идеи ? Я бы положил свои деньги на какую-то глупую проблему с конфигурацией в контейнере, но, похоже, я не могу их найти ...

1 Ответ

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

Хорошо, так что, если у кого-то есть эта проблема хорошо ... Нет проблем.

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

...