将卷添加到运行命令时,忽略docker端口映射

时间:2019-04-19 19:30:27

标签: node.js docker

当我使用以下命令启动Docker容器时

docker run -it -d -p 8081:8080 --name ${APP_CONTAINER_NAME} ${APP_IMAGE}

我可以在浏览器上通过localhost:8081

正常访问Web应用程序

但是,如果我改为使用以下两个卷来运行它:

docker run -it -d -p 8081:8080 -v ${PWD}:/app -v /app/node_modules --name ${APP_CONTAINER_NAME} ${APP_IMAGE}

端口映射被忽略-我无法在localhost:8081上访问它,但可以在localhost:8080上访问它。

我的dockerfile具有:

FROM node:8-alpine
RUN apk update && apk add bash
RUN npm install -g http-server
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 8080
CMD [ "http-server", "dist" ]

为什么将卷添加到第二个docker run命令中会忽略从8081到8080的端口映射?

如下面建议的那样,在没有 -d的情况下运行(但有卷):

docker run -it -p 8081:8080 -v ${PWD}:/app -v /app/node_modules --name ${APP_CONTAINER_NAME} ${APP_IMAGE}

给予:

Starting up http-server, serving dist
Available on:
  http://127.0.0.1:8080
  http://172.17.0.2:8080
Hit CTRL-C to stop the server

但是即使容器确实在运行,我也无法在localhost:8080localhost:8081上访问它:

$ docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                    NAMES
603b1bf02d58        app-image      "http-server dist"   11 seconds ago      Up 5 seconds        0.0.0.0:8081->8080/tcp   app-container

当我改为运行没有卷但仍映射到8081时,它可以工作:

Starting up http-server, serving dist
Available on:
  http://127.0.0.1:8080
  http://172.17.0.2:8080
Hit CTRL-C to stop the server

,我可以在localhost:8081上访问它。因此,添加卷时必须弄乱应用程序中的某些内容,只是不确定是什么。我也尝试过跑步:

docker volume prune

在启动容器之前,但是没有效果。为什么创建卷会阻止访问应用程序的任何想法?

0 个答案:

没有答案