Search code examples
amazon-web-servicesdockerdocker-composeserverless-frameworklocalstack

Docker with Serverless- files not getting packaged to container


I have a Serverless application using Localstack, I am trying to get fully running via Docker. I have a docker-compose file that starts localstack for me.

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"

When I run docker-compose up then deploy my application to localstack using SLS deploy everything works as expected. Although I want docker to run everything for me so I will run a Docker command and it will start localstack and deploy my service to it.

I have added a Dockerfile to my project and have added this

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

I then run docker build -t serverless/docker . followed by docker run -p 49160:3000 serverless/docker but am receiving the following error

  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

I guess this is what would happen if I tried to run SLS deploy in the incorrect folder. So I have logged into the docker container and cannot see my app that i want to run there, what am i missing in dockerfile that is needed to package it up?

Thanks


Solution

  • Execute the pwd command inside the container while running it. Try

    docker run -it serverless/docker pwd
    

    The error showing, sls not able to find the config file in the current working directory. Either add your config file to your current working directory (Include this copying in Dockerfile) or copy it to specific location in container and pass --config in CMD (sls deploy --config)

    This command can only be run in a Serverless service directory. Make sure to reference a valid config file in the current working directory