я не могу выполнить следующие команды после команды localstack --host - PullRequest
0 голосов
/ 09 мая 2020
FROM ubuntu:18.04
RUN apt-get update -y && \
    apt-get install -y apt-utils && \
    apt-get install -y python3-pip python3-dev\
    pypy-setuptools


COPY . .
WORKDIR .

RUN pip3 install boto3
RUN pip3 install awscli


RUN apt-get install libsasl2-dev
ENV HOST_TMP_FOLDER=/tmp/localstack
RUN apt-get install -y git
RUN apt-get install -y npm

RUN mkdir -p .localstacktmp
ENV TMPDIR=.localstacktmp
RUN pip3 install localstack[full]


RUN SERVICES=s3,lambda,es DEBUG=1 localstack start --host



WORKDIR ./boto3Tools
ENTRYPOINT [ "python3" ]
CMD [ "script.py" ] 

1 Ответ

0 голосов
/ 09 мая 2020

Вы не можете запускать службы в Dockerfile.

В вашем случае происходит то, что ваш Dockerfile работает RUN localstack start. Это продолжается, запускает выбранный набор служб и продолжает работу в ожидании соединений. Между тем, файл Dockerfile ожидает команды, которую вы запустили в fini sh, прежде чем продолжить.

Обычный ответ на это - запуск серверов и клиентов в отдельных контейнерах (или запуск сервера в контейнере и запускать клиентов прямо с вашего хоста). В этом случае уже есть localstack/localstack Docker изображение и предварительно созданная Docker Настройка Compose, поэтому вы можете просто запустить ее:

curl -LO https://github.com/localstack/localstack/raw/master/docker-compose.yml
docker-compose up

The localstack GitHub repo содержит дополнительную информацию по его использованию.

Если вы хотите использовать с этим приложение на основе Boto, самый простой способ - добавить его в тот же файл docker-compose.yml (или, наоборот, добавьте Localstack в уже имеющуюся настройку Compose). На этом этапе вы можете использовать обычное Docker межконтейнерное взаимодействие, чтобы достичь макета AWS, но вы должны настроить это в своем коде

s3 = boto3.client('s3',
                  endpoint_url='http://localstack:4566')

Вы должны в любом случае внести аналогичные изменения, чтобы использовать localstack , поэтому единственная разница - это имя хоста, которое вы устанавливаете.

...