【发布时间】:2021-11-30 05:18:22
【问题描述】:
我有一个在云 9 上本地运行良好的 python 脚本。我正在将它迁移到 fargate (codebuild)。我遇到了一些常见的问题,但我没有找到 python 模块等,只是将它们添加到环境中。似乎这些问题已经解决,但我从 python 收到了一条非常奇怪的终止消息。这是我从日志中得到的错误消息;
ERROR conda.cli.main_run:execute(33): Subprocess for 'conda run ['python', 'server.py']' command failed. (See above for error)
/opt/conda/envs/myenv/.tmpjsztda5o: line 3: 22 Killed python server.py
fargate 日志奇怪地显示这些错误在每次运行时都会发生一些变化(它会每约 2-3 分钟产生一次新的运行尝试)。例如
ERROR conda.cli.main_run:execute(33): Subprocess for 'conda run ['python', 'server.py']' command failed. (See above for error)
/opt/conda/envs/myenv/.tmp3hrkajas: line 3: 21 Killed python server.py
这是 Dockerfile。
FROM public.ecr.aws/lts/ubuntu:latest
RUN echo Updating existing packages, installing and upgrading python and pip.
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update -y
RUN apt-get install build-essential -y
RUN apt-get install g++ -y
RUN apt-get install gcc -y
RUN apt-get install gdal-bin -y
RUN which gcc
RUN echo $PATH
FROM osgeo/gdal:ubuntu-small-latest
FROM continuumio/miniconda3
WORKDIR /app
## Create the environment:
COPY environment.yml .
RUN conda env create -f environment.yml
#Make RUN commands use the new environment:
RUN echo "conda activate myenv" >> ~/.bashrc
SHELL ["conda", "run", "-n", "myenv", "/bin/bash", "-c"]
# Demonstrate the environment is activated:
RUN echo "Make sure flask is installed:"
RUN python -c "import flask"
RUN echo Copy service directory
COPY ./PHREEQC /PHREEQC
COPY ./service /service
COPY ./temp_files /temp_files
COPY ./INPUT_DATA /INPUT_DATA
WORKDIR /service
ENTRYPOINT ["conda", "run", "--no-capture-output", "-n", "myenv", "python","server.py"]
如果您对如何开始调试此问题有任何想法,请告诉我!
回答
感谢itamar,我能够通过增加容器的大小来解决问题
感谢 itamar,这确实是内存问题,因此将 ECR 实例重新配置为稍大的实例。
- 注销现有任务定义 ->
aws ecs deregister-task-definition --task-definition ecs_name:ID
- 注册具有更新大小的新任务定义。
大小 -> 从 cpu 256 和内存 512 更改为 ->
"family": "fam_name",
"cpu": "1024",
"memory": "4096",
"networkMode": "awsvpc",
"requiresCompatibilities": [
"FARGATE"....
然后
aws ecs register-task-definition --cli-input-json file://~/environment/aws-cli/task-definition.json
- 更新服务
aws ecs update-service --cluster name-Cluster --service name-Service --task-definition ecs_name:ID
希望这会有所帮助!
【问题讨论】:
-
与您的主要问题无关,最好使用由 Conda 本身打包的编译器之一,而不是操作系统编译器,就像 libstdc++ 依赖项一样。
-
另一个建议:您正在创建两个图像,并且看起来像扔掉第一个图像。你可以在 "FROM continuumio/miniconda3" 之前扔掉所有东西,仍然可以得到同样的效果。您并没有像您想象的那样组合图像,您只是在创建一系列 3 张图像并且只使用最后一张。
标签: python linux docker amazon-ec2 conda