我无法在localstack--host命令后执行下一个命令。

问题描述 投票:0回答:1
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" ] 
amazon-web-services docker ubuntu boto3
1个回答
0
投票

你不能在Docker文件中启动服务。

在你的情况下,你的 Dockerfile 正在运行的是 RUN localstack start. 那就继续启动所选的一组服务,并保持运行,等待连接。 同时,Dockerfile也在等待你启动的命令完成后再继续前进。

通常的答案是在不同的容器中启动服务器和客户端(或者在容器中启动服务器,直接从你的主机上运行客户端)。 在这种情况下,已经有一个 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无论如何都要做类似的改动,所以唯一的区别就是你设置的主机名。

© www.soinside.com 2019 - 2024. All rights reserved.