我有一个 Node 应用程序,可以使用 npm run
在本地运行。它使用express作为服务器并使用浏览器同步来显示热重载。
Express 正在使用端口 6001
Browsersync 使用端口 3000
和 3001
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/