gulpfile.js
Код: Выделить всё
const { watch, series } = require('gulp');
const browserSync = require('browser-sync');
const connect = require("gulp-connect-php");
function connectPHP (cb) {
connect.server({
base: "/public",
hostname: "localhost",
port: 4000
});
cb()
}
function serve (cb) {
browserSync.init({
proxy: "http://localhost:4000"
});
watch("*.html").on("change", browserSync.reload)
watch("*.php").on("change", browserSync.reload)
};
exports.default = series(connectPHP, serve);
Это мой Dockerfile:
Код: Выделить всё
FROM node:20-alpine
WORKDIR /app
COPY . .
RUN mkdir public
RUN npm install gulp-cli -g
RUN npm install
VOLUME /public
CMD [ "gulp" ]
EXPOSE 3000
EXPOSE 3001
EXPOSE 4000
Код: Выделить всё
sync:
depends_on:
- db
ports:
- 3000:3000 # BrowserSync main server
- 3001:3001 # BrowserSync control panel
- 4000:4000 # gulp-connect-php server
volumes:
- .:/app/public
Код: Выделить всё
* Host localhost:3000 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
* Trying [::1]:3000...
* Connected to localhost (::1) port 3000
> GET / HTTP/1.1
> Host: localhost:3000
> User-Agent: curl/8.9.0
> Accept: */*
>
* Request completely sent off
Когда я запрашиваю http://localhost:3001, Панель управления BrowserSync< /em>, я получаю реальный ответ (я могу получить доступ к панели управления, если открою ее в браузере), поэтому я думаю, что проблема не в BrowserSync:
Код: Выделить всё
* Host localhost:3001 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
* Trying [::1]:3001...
* Connected to localhost (::1) port 3001
> GET / HTTP/1.1
> Host: localhost:3001
> User-Agent: curl/8.9.0
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 200 OK
< Content-Type: text/html
< Content-Encoding: gzip
< Date: Thu, 25 Jul 2024 22:51:34 GMT
< Connection: keep-alive
< Keep-Alive: timeout=5
< Transfer-Encoding: chunked
<
Warning: Binary output can mess up your terminal. Use "--output -" to tell curl to output it to your terminal
Warning: anyway, or consider "--output " to save to a file.
* client returned ERROR on write of 16384 bytes
* Failed reading the chunked-encoded stream
* closing connection #0
Код: Выделить всё
* Host localhost:4000 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
* Trying [::1]:4000...
* Connected to localhost (::1) port 4000
> GET / HTTP/1.1
> Host: localhost:4000
> User-Agent: curl/8.9.0
> Accept: */*
>
* Request completely sent off
* Recv failure: Connection reset by peer
* closing connection #0
curl: (56) Recv failure: Connection reset by peer
Итак, как я могу заставить это работать только с одним контейнером ?
PD: Я знаю, что для живой перезагрузки файлов php вам на самом деле не нужен gulp-connect-php, и на самом деле, если я удалю этот пакет и просто использую BrowserSync, тогда вся эта проблема исчезает, но дело в том, что BrowserSync требует, чтобы в файле присутствовал тег body, чтобы иметь возможность перезагрузить его, и я не хочу заключать все свои php-файлы в body теги.
Подробнее здесь: https://stackoverflow.com/questions/787 ... ide-docker