我在使用Gulp、Browsersync和Docker时遇到了Node.js应用程序的问题。
当在本地运行gulp watch
时,一切都很好。
但是,当使用docker-compose up
时,我得到一个错误
无法获取/
端口3001上的Browsersync UI按预期工作。
在本地运行应用程序:
gulp watch
字符串
x1c 0d1x的数据
在Docker容器中运行:
docker-compose up
型
我得到错误:
无法获取/
的
Web浏览器控制台中的错误消息:
拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“default-src 'self'”。启用内联执行需要“unsafe-inline”关键字、散列(“sha 256-ZfFIHrd 9 MifrQdadZrM 3 hznhYlx + PRQo 8 +OCWjaPDaY =')或随机数(”nonce-...“)。另请注意,未显式设置”script-src ",因此使用“default-src”作为回退
Docker compose logs:它不会产生任何错误,只是记录与我在本地使用gulp watch
运行时相同的输出。
docker-compose up
[+] Building 0.0s (0/0) docker:desktop-linux
WARN[0000] Found orphan containers ([boilerplate-app-1]) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
[+] Running 1/0
✔ Container boilerplate-node-1 Created 0.0s
Attaching to boilerplate-node-1
boilerplate-node-1 | [07:52:39] Using gulpfile /Users/filiphuhta/Documents/Projects/Bitbucket/boilerplate/gulpfile.js
boilerplate-node-1 | [07:52:39] Starting 'watch'...
boilerplate-node-1 | [07:52:39] Starting 'cleanDist'...
boilerplate-node-1 | [07:52:39] Finished 'cleanDist' after 1.61 ms
boilerplate-node-1 | [07:52:39] Starting 'buildScripts'...
boilerplate-node-1 | [07:52:39] Starting 'lintScripts'...
boilerplate-node-1 | [07:52:39] Starting 'buildStyles'...
boilerplate-node-1 | [07:52:39] Starting 'copyFiles'...
boilerplate-node-1 | Browserslist: caniuse-lite is outdated. Please run:
boilerplate-node-1 | npx update-browserslist-db@latest
boilerplate-node-1 | Why you should do it regularly: https://github.com/browserslist/update-db#readme
boilerplate-node-1 | [07:52:40] Finished 'copyFiles' after 413 ms
boilerplate-node-1 | [07:52:40] Finished 'buildScripts' after 417 ms
boilerplate-node-1 | [07:52:40] Finished 'lintScripts' after 417 ms
boilerplate-node-1 | [07:52:40] Finished 'buildStyles' after 419 ms
boilerplate-node-1 | [07:52:40] Starting 'startServer'...
boilerplate-node-1 | [07:52:40] Finished 'startServer' after 28 ms
boilerplate-node-1 | [07:52:40] Starting 'watchSource'...
boilerplate-node-1 | [07:52:40] Finished 'watchSource' after 1.43 ms
boilerplate-node-1 | [07:52:40] Finished 'watch' after 454 ms
boilerplate-node-1 | [Browsersync] Access URLs:
boilerplate-node-1 | -----------------------------------
boilerplate-node-1 | Local: http://localhost:3000
boilerplate-node-1 | External: http://172.18.0.2:3000
boilerplate-node-1 | -----------------------------------
boilerplate-node-1 | UI: http://localhost:3001
boilerplate-node-1 | UI External: http://localhost:3001
boilerplate-node-1 | -----------------------------------
boilerplate-node-1 | [Browsersync] Serving files from: assets/
boilerplate-node-1 | [Browsersync] Couldn't open browser (if you are using BrowserSync in a headless environment, you might want to set the open option to false)
型
gulpfile.js:
let startServer = function (done) {
if (!settings.reload) return done();
// Initialize BrowserSync
browserSync.init({
server: {
baseDir: paths.reload,
directory: true
},
proxy: "node:3000",
});
done();
};
型
Dockerfile:
FROM node:20
WORKDIR /usr/src/app
COPY gulpfile*.js ./
COPY package*.json ./
RUN npm install --global gulp-cli
RUN npm install
EXPOSE 3000 3001
CMD ["gulp watch"]
型
docker-compose.yml:
version: "1"
services:
node:
build: .
command: gulp watch
ports:
- "3000:3000"
- "3001:3001"
型
浏览器同步UI在端口3001
上工作正常:
我不太擅长配置Docker容器,所以这肯定是我错过的东西。当我在机器上使用docker容器而不是本地时,Cannot GET /
的问题是什么?
谢谢您的帮助!
2条答案
按热度按时间nkcskrwz1#
您的Docker设置在使用BrowserSync运行Node.js应用时遇到了“
Cannot GET /
“错误。字符串
BrowserSync server在Docker中运行时无法正确提供文件。
您可能需要更改BrowserSync配置中的代理设置。
node:3000
代理似乎不正确,因为Docker可能需要docker-compose.yml
文件中的服务名称。如果node
是您的服务名称,这很好,但请确保Node.js应用程序正在运行并可在容器内的端口3000上访问。确保文件被正确复制到Docker容器中。您可能需要在
docker-compose.yml
中定义一个volume,以确保本地文件得到服务:型
您的Dockerfile仅复制
gulpfile.js
和package.json
。请确保将整个项目目录(或至少运行应用程序所需的文件)复制到Docker容器中。型
但是请确保将
node_modules
目录从复制到容器中排除。您可以通过将.dockerignore
文件添加到项目目录来完成此操作:型
Web浏览器控制台中的错误消息指示Content Security Policy (CSP)问题。如果您设置了CSP,请确保它允许运行必要的脚本。
你的
docker-compose.yml
是:型
Dockerfile
:型
cwxwcias2#
检查Docker容器中的BrowserSync配置:
字符串
在
gulpfile.js
中添加一些调试输出,以便在Docker容器中运行时打印BrowserSync配置。这可以帮助您验证配置是否正确并满足您的期望。