我正在通过apache docker容器内的gulp运行代理的浏览器同步服务器。当我手动启动服务器(启动容器,连接外壳,通过连接的外壳运行gulp脚本)时,一切工作正常,并且可以通过所需的端口访问服务器。但是,当我告诉docker为我执行gulp
命令(通过dockerfile中的CMD
或docker-compose中的command
)时,服务器会成功启动,但无法访问并超时。不过,shell中的输出是相同的:
apache-browsersync_1 | [18:35:01] Using gulpfile /var/www/html/gulpfile.js
apache-browsersync_1 | [18:35:01] Starting 'default'...
apache-browsersync_1 | [Browsersync] Proxying: http://localhost:8080
apache-browsersync_1 | [Browsersync] Access URLs:
apache-browsersync_1 | ----------------------------------
apache-browsersync_1 | Local: http://localhost:80
apache-browsersync_1 | External: http://172.21.0.2:80
apache-browsersync_1 | ----------------------------------
apache-browsersync_1 | UI: http://localhost:3001
apache-browsersync_1 | UI External: http://localhost:3001
apache-browsersync_1 | ----------------------------------
apache-browsersync_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)
我已经尝试在docker-compose中使用command
并在我的dockerfile中使用CMD
,RUN
和ENTRYPOINT
,甚至延迟一分钟开始吞咽容器启动后。结果仍然相同,服务器已成功启动,但正在超时。
似乎通过附加的shell手动执行的命令与从dockerfile调用的thate being是有区别的。
docker-compose:
version: "3"
services:
...
apache-browsersync:
build:
context: .
dockerfile: apache.dockerfile
volumes:
- .:/var/www/html/
ports:
- 80:80
...
dockerfile:
FROM php:apache
# change apache port from 80 to 8080
RUN sed -i 's/80/8080/g' /etc/apache2/ports.conf
# install node
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash -
RUN apt-get install -y nodejs
# install gulp
RUN npm install gulp-cli -g
# copy project data
COPY . /var/www/html
# install dependencies
RUN npm install
# start gulp
CMD gulp
gulp脚本:
var gulp = require('gulp');
var browserSync = require('browser-sync').create();
function defaultTask() {
browserSync.init({
proxy: 'localhost:8080',
port: 80
});
}
exports.default = defaultTask;
答案 0 :(得分:0)
在同一个容器中运行gulp时,Apache正在停止,因此我将这两种服务拆分为不同的容器,并通过gulp文件中的docker-compose容器名称引用了apache服务器。