使用docker-compose对节点表达应用程序进行Docker化

时间:2016-08-04 15:22:17

标签: node.js docker docker-compose

我有一个节点应用,我可以使用npm run在本地运行。它使用express作为服务器并使用浏览器同步来显示热重新加载。

Express正在使用端口6001
Browsersync使用端口30003001

Docker文件

FROM node/argon

WORKDIR /usr/src/app

COPY package.json /usr/src/app/
RUN npm install
ENV PATH /usr/src/app/node_modules/.bin:$PATH

USER app
COPY . /usr/src/app
RUN sudo chown -R app /usr/src/app
RUN npm start
EXPOSE 6001
CMD ["npm", "start"]

搬运工-compose.yml

web:
  extends:
    file: docker-compose-base.yml
    service: web
  ports:
    - "6001:6001"
  environment:
    VIRTUAL_HOST: testing.docker

搬运工-撰写-base.yml

web: 
  build: .
  command: npm start
  volumes:
    - .:/usr/src/app
    - /usr/src/app
    - /usr/src/app/node_modules

我可以运行docker-compose build并且它构建得很好,正在运行docker-compose up吐出以下内容:

[BS] Access URLs:
 ----------------------------
 Local: http://localhost:3000
 ----------------------------
    UI: http://localhost:3001
 ----------------------------
Listening on http://localhost:6001

但访问http://testing.docker似乎容器从未挂载。运行docker-compose ps不显示容器,但运行docker ps显示容器可用。

我完全不知所措。

2 个答案:

答案 0 :(得分:1)

我假设您在浏览器可以解析的地方设置了“testing.docker”主机条目,将该条目的格式更改为:

environment:
  - VIRTUAL_HOST=testing.docker

您还需要公开ports 3000和3001以使浏览器同步工作:

ports:
  - "6001:6001"
  - "3000:3000"
  - "3001:3001"

如上所述,如果要分离容器以在后台运行它们,请使用docker-compose up -d。如果要在检查docker-compose ps而不是分离的同一终端窗口中退出输出,则容器将不会运行。如果您确实在单独的窗口中签入,请确保您位于正确的目录中和/或在撰写命令中使用--project-name

答案 1 :(得分:0)

我错过了这里的关键部分:我使用小艇来管理容器,它需要一个端口转发。

这样就可以将文件更改为:

<强> Dockerfile

FROM node/argon

RUN echo 08-03-2016 > last_docker_cache_bust

EXPOSE 6001

WORKDIR /usr/src/app

COPY package.json .npmrc* /usr/src/app/
RUN npm install
ENV PATH /usr/src/app/node_modules/.bin:$PATH

ADD . /usr/src/app
RUN sudo chown -R app /usr/src/app

<强>搬运工-compose.yml

web:
  extends:
    file: docker-compose-base.yml
    service: web
  ports:
    # The first port is managed by dinghy, the second is the app's running port for express
    - "7510:6001"
  environment:
    VIRTUAL_HOST: testing.docker