2017-07-07 58 views
1
以外的端口

我使用泊坞运行一个Express应用程序,一切都很好,如果我在端口3000。Dockerfile我使用运行它暴露比3000 Express和码头工人

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" ] 

和泊坞窗run命令

docker run -p 3500:3500 me/myapp

它引发以下错误

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

我敢肯定,这是基本的东西,但我是新来的这一点,并不能由Google上搜寻它找到解决方案。一个指针在正确的方向将非常感激。

+0

为什么不使用标准节点端口(如80或4000)并将该端口映射到主机上的3500? –

回答

1

您正在尝试像在bash脚本中那样设置环境变量PORT。 Docker不明白 - CMD配置需要一些它可以执行的东西 - 命令名称&一些参数。

在Docker中执行所需操作的方法是使用ENV。在你的情况下,它会是这个样子:

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

你可以把ENV任何地方Dockerfile的CMD之前,但它是有道理以后,让他们的一部分,所以变化不强制重建并且可以共享更多图层。

+0

感谢您的解释,这确实解决了它!当我可以的时候,我会标记它是正确的。 – mcansado