2017-07-07 70 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