bounty将在5天后过期。回答此问题可获得+500声望奖励。dorriz希望引起更多人关注此问题。
我有一个Dockerfile
FROM node:19-bullseye-slim
WORKDIR /app
# Install prerequisites
RUN apt-get update && apt-get install -y \
gnupg \
curl \
bash
COPY . /app
CMD ./bootstrap.sh
和一个bash脚本
#!/bin/bash
npm add yarn
yarn add pm2 ---dev
yarn install
npx playwright install-deps chromium
yarn test
echo "Finished"
命令
1.安装Yarn,
1.从我的应用程序安装依赖项,
1.安装剧作家 chrome 浏览器
1.运行package.json文件中的测试命令“test”
"test": "pm2 start server.js && npm run test:cucumber",
“test:cucumber”:“cucumber-js --require ./cucumber.js --require ./tests/e2e-playwright/step-definitions/**/*.js -f json:cucumber_report.json --publish-quiet”,
该命令应该启动Vue的dev服务器,然后运行cucumber测试
我的server.js文件
module.exports = {
apps: [
{
name: "WEB",
script: "./node_modules/@vue/cli-service/bin/vue-cli-service.js",
args: "serve"
}
]
};
pm2启动server.js,调用vue-cli-service serve(启动vue dev-server)
但是vue dev服务器没有启动,我的测试失败了,因为应用程序不可用
如果我运行vue-cli-service,那么一切都按预期运行,并且可以在http:localhost:8080上找到该网站
有人能告诉我如何让pm2运行服务器并且它将可用吗?有人能告诉我,如果我可以运行我的测试并连接到Docker容器中的端口8080,或者我必须将我的测试指向使用host.docker.internal?我该怎么做?
谢谢
1条答案
按热度按时间pgky5nke1#
问题似乎是PM2无法正确启动Vue dev服务器。其中一个可能的原因是PM2与Vue应用程序不在同一个工作目录中运行。
要解决这个问题,您可以更新server.js文件以包含cwd(当前工作目录)属性,如下所示:
这会告诉PM2在/app目录中运行Vue应用程序(您可能需要更新此路径以匹配应用程序的位置)。
关于端口问题,如果你的Vue应用在Docker容器中的端口8080上运行,你应该可以通过使用http://localhost:8080从测试中访问它。
但是,这假设测试也在同一个容器中运行。如果测试在容器外部运行(例如,在主机上),则需要使用容器的IP地址而不是localhost。您可以通过运行
docker inspect <container-id> | grep IPAddress
(替换为容器的实际ID)。或者,您可以使用Docker的端口Map功能将容器中的端口8080Map到主机上的端口。例如,您可以像这样运行容器:
这将容器中的端口8080Map到主机上的端口8080,因此您应该能够使用http://localhost:8080从测试中访问Vue应用程序。