我有一个节点应用,我可以使用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"]
搬运工-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
显示容器可用。
我完全不知所措。
答案 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