#node.js #amazon-web-services #docker #amazon-dynamodb
#node.js #amazon-веб-сервисы #docker #amazon-dynamodb
Вопрос:
Я пытаюсь создать два контейнера docker, вдохновленных контейнеризацией бессерверных API. Я хочу запустить my my API и DynamoDB локально в двух разных контейнерах, как указано my Dockerfile
(для API) и localstack
as (указано в docker-compose.yml`) для моего локального DynamoDB. Эти файлы доступны ниже.
Он завершается после создания контейнера для моего API, о чем свидетельствуют приведенные ниже журналы.
Successfully built e0798a6833ce
Successfully tagged hafiz/hafiz_aws_api_gateway:latest
Starting dynamodb_localstack ... done
Recreating hafiz_aws_api_gateway ... done
Attaching to dynamodb_localstack, hafiz_aws_api_gateway
dynamodb_localstack | Starting mock DynamoDB (http port 8000)...
dynamodb_localstack | Ready.
dynamodb_localstack | (. .venv/bin/activate; exec bin/localstack start)
dynamodb_localstack | Starting local dev environment. CTRL-C to quit.
dynamodb_localstack | Starting mock DynamoDB (http port 8000)...
dynamodb_localstack | Ready.
dynamodb_localstack | (. .venv/bin/activate; exec bin/localstack start)
dynamodb_localstack | Starting local dev environment. CTRL-C to quit.
dynamodb_localstack | Starting mock DynamoDB (http port 8000)...
dynamodb_localstack | Ready.
dynamodb_localstack | 2019-04-16 05:01:01,975 INFO Set uid to user 0 succeeded
dynamodb_localstack | 2019-04-16 05:01:01,977 INFO supervisord started with pid 12
hafiz_aws_api_gateway | sam_local_start_api.sh: 1: sam_local_start_api.sh: sam: not found
hafiz_aws_api_gateway exited with code 127
Вот мой docker-compose.yml
version: '3'
# builds the api container and sets up the localstack container to run
services:
api:
build: .
image: hafiz/hafiz_aws_api_gateway
depends_on:
- localstack
ports:
- '3000:3000'
container_name: hafiz_aws_api_gateway
# these are the environment variables that are used in the api
environment:
AWS_ENDPOINT: 'http://dynamodb_localstack:8000' # localstack container host for dynamodb
AWS_REGION: 'localhost'
AWS_ACCESS_KEY_ID: 'fake-access-key-id'
AWS_SECRET_ACCESS_KEY: 'fake-secret-key'
AWS_TABLE_NAME: 'hafizItemTable'
localstack:
image: localstack/localstack:latest
ports:
- '8000:8000' # using port 8000 to be consistent with dynamodb local jar
- '8080:8080' # the localstack admin portal
container_name: dynamodb_localstack
environment:
SERVICES: dynamodb:8000
DATA_DIR: '/tmp/localstack/data'
Вот мой dockerfile
# use this dockerfile to build an image for this api
FROM node:8.10
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["sh", "sam_local_start-api.sh"
Мой package.json
...
"scripts": {
"seed": "node ./seed/runner.js",
"start": "sam local start-api",
"test": "echo "Error: no test specified" amp;amp; exit 1"
},
...
Мой вопрос в том, как я могу указать команду CMD в моем файле docker, которая вызовет команду командной строки AWS SAM:
sam local start-api
или, если есть лучший способ запуска скрипта?
Комментарии:
1.
sam
инструмент установлен в контейнере?sam: not found
Ответ №1:
CMD ["sh", "sam_local_start.sh"]
изменить на :
CMD ["npm","run","start"]
Это вызовет команду run: sam local start-api
на контейнерном терминале, который он определяет в package.json
Сначала убедитесь, что sam
инструмент уже установлен в контейнере.