通过dockerfile启动后无法访问代理服务器

时间:2019-06-27 14:24:09

标签: node.js gulp docker-compose dockerfile browser-sync

问题

我正在通过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中使用CMDRUNENTRYPOINT,甚至延迟一分钟开始吞咽容器启动后。结果仍然相同,服务器已成功启动,但正在超时。

似乎通过附加的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;

1 个答案:

答案 0 :(得分:0)

在同一个容器中运行gulp时,Apache正在停止,因此我将这两种服务拆分为不同的容器,并通过gulp文件中的docker-compose容器名称引用了apache服务器。