用Express和Docker暴露3000以外的端口

我使用Docker来运行一个快速应用程序,一切都很好,如果我在端口3000上运行它。我使用的Dockerfile是

FROM node:boron # Create app directory RUN mkdir -p /usr/src/app WORKDIR /usr/src/app # Install app dependencies COPY package.json /usr/src/app/ RUN npm install # Bundle app source COPY . /usr/src/app EXPOSE 3000 CMD ["npm", "start" ] 

我现在想要在端口3500上运行它。我调整了Dockerfile

 FROM node:boron # Create app directory RUN mkdir -p /usr/src/app WORKDIR /usr/src/app # Install app dependencies COPY package.json /usr/src/app/ RUN npm install # Bundle app source COPY . /usr/src/app EXPOSE 3500 CMD ["PORT=3500", "npm", "start" ] 

和docker运行命令

docker run -p 3500:3500 me/myapp

它会抛出以下错误

container_linux.go:262: starting container process caused "exec: \"PORT=3500\": executable file not found in $PATH"

我确信这是一个基本的东西,但我是新来的,找不到解决方法。 一个指针在正确的方向将非常感激。

你正在尝试像在bash脚本中那样设置环境variablesPORT 。 docker工人不理解 – CMDconfiguration想要的东西,它可以执行 – 命令名称和一些参数。

在Docker中执行所需的方法是使用ENV 。 在你的情况下,它看起来像这样:

 ENV PORT 3500 CMD ["npm", "start" ] 

您可以在CMD之前将ENV放在Dockerfile的任何位置,但稍后保留一部分区域是有意义的,所以更改不会强制执行代价高昂的重build,并且可以共享更多的层。