暴露比3000 Express和码头工人
问题描述:
以外的端口
我使用泊坞运行一个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上搜寻它找到解决方案。一个指针在正确的方向将非常感激。
答
您正在尝试像在bash脚本中那样设置环境变量PORT
。 Docker不明白 - CMD
配置需要一些它可以执行的东西 - 命令名称&一些参数。
在Docker中执行所需操作的方法是使用ENV
。在你的情况下,它会是这个样子:
ENV PORT 3500
CMD ["npm", "start" ]
你可以把ENV
任何地方Dockerfile的CMD
之前,但它是有道理以后,让他们的一部分,所以变化不强制重建并且可以共享更多图层。
+0
感谢您的解释,这确实解决了它!当我可以的时候,我会标记它是正确的。 – mcansado
为什么不使用标准节点端口(如80或4000)并将该端口映射到主机上的3500? –