首页 > 解决方案 > 无法在本地机器上通过 ebcli 运行 docker 容器

问题描述

ebcli如何发出docker运行命令似乎存在一些问题。

以下是我在 MacOS 机器上运行的命令

eb local run --port 3001

虽然eb能够成功构建 docker 映像,但在尝试运行该映像时会引发以下错误。

docker: invalid publish opts format (should be name=value but got '3001:${PORT}').

以下是我的 Dockerfile 的样子

# Check out https://hub.docker.com/_/node to select a new base image
FROM node:10-slim

# Set to a non-root built-in user `node`
USER node

# Create app directory (with user `node`)
RUN mkdir -p /home/node/app

WORKDIR /home/node/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY --chown=node package*.json ./

RUN npm install

# Bundle app source code
COPY --chown=node . .

RUN npm run build

# Bind to all network interfaces so that it can be mapped to the host OS
ENV HOST=0.0.0.0 PORT=3000

EXPOSE ${PORT}

CMD [ "node", "." ]

标签: node.jsdockeramazon-elastic-beanstalkebcli

解决方案


这是一个限制ebcli。发生这种情况的原因是ebcli解析您的 dockerfile 以检索暴露的端口。因为 ebcli 将您的 EXPOSE 指令作为文字字符串读取,所以当您在 EXPOSE 指令中引用环境变量时,ebcli 会尝试将该字符串作为-p 3001:${PORT}.

要解决此问题,您需要修改 EXPOSE 指令以显式公开值 3000。

例子:

EXPOSE 3000

可以进行一些增强来改善这种体验。随时在ebcli github 存储库上报告此问题。


推荐阅读