带有无服务器的 Docker-文件未打包到容器中

问题描述

我有一个使用 Localstack 的无服务器应用程序,我正在尝试通过 Docker 完全运行。 我有一个为我启动 localstack 的 docker-compose 文件

version: '3.1'

services:
  localstack:
    image: localstack/localstack:latest
    environment:
      - AWS_DEFAULT_REGION=us-east-1
      - EDGE_PORT=4566
      - SERVICES=lambda,s3,cloudformation,sts,apigateway,iam,route53,dynamodb
    ports:
      - '4566-4597:4566-4597'
    volumes:
      - "${TEMPDIR:-/tmp/localstack}:/temp/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"

当我运行 docker-compose up 然后使用 SLS deploy 将我的应用程序部署到 localstack 时,一切都按预期工作。虽然我希望 docker 为我运行一切,所以我将运行一个 Docker 命令,它将启动 localstack 并将我的服务部署到它。

我在我的项目中添加一个 Dockerfile 并添加了这个

FROM node:16-alpine

RUN apk update

RUN npm install -g serverless; \
    npm install -g serverless-localstack;

EXPOSE 3000

CMD ["sls","deploy","--host","0.0.0.0" ]

然后我运行 docker build -t serverless/docker . 后跟 docker run -p 49160:3000 serverless/docker 但收到以下错误

  This command can only be run in a Serverless service directory. Make sure to reference a valid config file in the current working directory if you're using a custom config file

我想如果我尝试在不正确的文件夹中运行 SLS 部署会发生这种情况。所以我已经登录到 docker 容器并且看不到我想在那里运行的应用程序,我在打包它所需的 dockerfile 中缺少什么?

谢谢

解决方法

运行时在容器内执行 pwd 命令。试试

docker run -it serverless/docker pwd

错误显示,sls 无法在当前工作目录中找到配置文件。将您的配置文件添加到您当前的工作目录(在 Dockerfile 中包含此副本)或将其复制到容器中的特定位置并在 CMD (--config) 中传递 sls deploy --config

此命令只能在无服务器服务目录中运行。制作 确保在当前工作目录中引用有效的配置文件