【问题标题】:Dockerize a node express app with docker-compose使用 docker-compose 对 node express 应用程序进行 Dockerize
【发布时间】:2016-08-05 03:43:04
【问题描述】:

我有一个节点应用程序,可以使用 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"]

docker-compose.yml

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

docker-compose-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 显示容器可用。

我完全不知所措。

【问题讨论】:

  • 你使用docker-compose up启动容器了吗?
  • 是的,这就是生成“监听”日志的原因。
  • 尝试docker-compose up -d,然后在该目录中尝试docker-compose ps,以及docker ps,看看它们是否返回任何内容。也可以试试curl localhost:6001检查端口映射是否正确。

标签: node.js docker docker-compose


【解决方案1】:

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

environment:
  - VIRTUAL_HOST=testing.docker

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

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

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

【讨论】:

  • 我认为您的解决方案通常可以工作,但是其中缺少一个关键组件 - 我忘记了我正在使用小艇这一事实。
【解决方案2】:

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

这样文件就会变成这样:

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

docker-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

【讨论】:

    猜你喜欢
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    相关资源
    最近更新 更多