Запуск сценария оболочки для Localstack в контейнере Docker
Я использовал localstack для разработки службы против локально. Я только что запустил их образ докера через docker run --rm -p 4567-4583:4567-4583 -p 8080:8080 localstack/localstack
А затем я вручную запускаю небольшой скрипт, чтобы настроить свои корзины S3, очереди SQS и т. Д.
Теперь я хотел бы сделать это проще для других, поэтому я решил добавить файлы Dockerfile и docker-compose.yml. К сожалению, когда я пытаюсь получить это и запустить, используя docker-compose up
Я получаю сообщение об ошибке, что команда из моего скрипта установки не может подключиться к сервисам localstack.
make_bucket failed: s3://localbucket Could not connect to the endpoint URL: "http://localhost:4572/localbucket"
Dockerfile:
FROM localstack/localstack
#since this is just local dev set up, localstack doesn't require
anything specific here.
ENV AWS_DEFAULT_REGION='[useast1]'
ENV AWS_ACCESS_KEY_ID='[lloyd]'
ENV AWS_SECRET_ACCESS_KEY='[christmas]'
COPY bin/localSetup.sh /localSetup.sh
COPY fixtures/notifications.json /notifications.json
RUN ["chmod", "+x", "/localSetup.sh"]
RUN pip install awscli
# expose service & web dashboard ports
EXPOSE 4567-4582 8080
ENTRYPOINT ["/localSetup.sh"]
докер-compose.yml
version: '3'
services:
localstack:
build: .
ports:
- "8080:8080"
- "4567-4582:4567-4582"
localSetup.sh
#!/bin/bash
aws --endpoint-url=http://localhost:4572 s3 mb s3://localbucket
#additional similar calls but left off for brevity
Я пробовал переключаться localhost
в 127.0.0.1
в моем скрипте команды, но я получаю с той же ошибкой. Я, наверное, скучаю по чему-то глупому здесь.
0 ответов
Существует еще один способ создания собственных ресурсов AWS при новом запуске локального стека.Поскольку у вас уже есть сценарий bash для ваших ресурсов, вы можете просто смонтировать свой сценарий в/docker-entrypoint-initaws.d/
. Итак, мой файл composefile будет:
localstack:
image: localstack/localstack:latest
container_name: localstack_aws
ports:
- '4563-4599:4563-4599'
- '8055:8080'
environment:
- SERVICES=s3
- DEFAULT_REGION=us-east-1
volumes:
- './localSetup.sh:/docker-entrypoint-initaws.d/make-s3.sh'
Также я бы предпочел awslocal
над aws --endpoint
в сценарии bash, поскольку он использует учетные данные и конечную точку за вас.
Попробуйте добавить имя хоста в файл docker-compose и отредактируйте файл точки входа, чтобы отразить это имя хоста.
докер-compose.yml
version: '3'
services:
localstack:
build: .
hostname: localstack
ports:
- "8080:8080"
- "4567-4582:4567-4582"
localSetup.sh
#!/bin/bash
aws --endpoint-url=http://localstack:4572 s3 mb s3://localbucket
Это был мой docker-compose-dev.yaml
Я использовал для тестирования приложения, которое использовало localstack. Я использовал команду docker-compose -f docker-compose-dev.yaml up
Я тоже использовал то же самое localSetup.sh
ты использовал.
version: '3'
services:
localstack:
image: localstack/localstack
hostname: localstack
ports:
- "4567-4584:4567-4584"
- "${PORT_WEB_UI-8082}:${PORT_WEB_UI-8082}"
environment:
- SERVICES=s3
- DEBUG=1
- DATA_DIR=${DATA_DIR- }
- PORT_WEB_UI=${PORT_WEB_UI- }
- DOCKER_HOST=unix:///var/run/docker.sock
volumes:
- "${TMPDIR:-/tmp/localstack}:/tmp/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
networks:
- backend
sample-app:
image: "sample-app/sample-app:latest"
networks:
- backend
links:
- localstack
depends_on:
- "localstack"
networks:
backend:
driver: 'bridge'