node.js - 使用 docker-compose 对 Node Express 应用程序进行 Docker 化

标签 node.js docker docker-compose

我有一个 Node 应用程序,可以使用 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 会显示容器可用。

我彻底迷失了。

最佳答案

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

environment:
  - VIRTUAL_HOST=testing.docker

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

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

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

关于node.js - 使用 docker-compose 对 Node Express 应用程序进行 Docker 化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38771412/

相关文章:

javascript - jQuery 无法在 Express JS 中工作 - NodeJS

node.js - Multer 和 express-validator 在验证中产生问题

node.js - 为什么 app.intent 在 actions-on-google 中抛出错误(格式错误的响应)

oracle - "sqlplus": executable file not found in $PATH"when running a command with docker exec

python - Docker 中的 MySQL 找不到 mysql_config

reactjs - 如何在Dockerfile中使用CMD以分离模式在Docker中运行 `httpd`?

node.js - 从 Node 中的对象生成一致的 sha256 哈希值

docker - 使用docker-compose.yaml的动态crontab

docker - 从 dockerized 网页到后端服务器进行 API 调用最终会出现 net::ERR_CONNECTION_REFUSED

asp.net - Nginx 无法将 Docker 部署到 Amazon