在GitHub Actions运行Docker容器时未找到Streamlit
这是在GitHub Actions中创建Docker镜像时的日志,显示了安装streamlit的过程
出现了一个错误:6af83d23fe21d8a1a55ff68d32f9ed7b3c4da6d9bf032f26e8ccd3f56528e133 docker: 来自守护进程的错误响应:为容器创建任务失败:创建shim任务失败:OCI运行时创建失败:runc创建失败:无法启动容器进程:执行:"streamlit":在$PATH中找不到可执行文件:未知。 错误:进程以退出代码127完成。
Dockerfile
===================
FROM python:3.8-slim-buster
EXPOSE 8501
RUN apt-get update && \
apt-get install -y \
build-essential \
software-properties-common \
git && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY requirements.txt /app
RUN pip3 install -r requirements.txt
COPY . /app
CMD ["streamlit", "run", "app.py", "--server.port=8501", "--server.address=0.0.0.0"]
在我本地构建Docker镜像时一切正常,但在部署时却失败了
requirements.txt
===================
bentoml==1.0.25
joblib==1.2.0
pip-chill==1.0.1
torchvision==0.14.1
tqdm==4.64.1
wincertstore==0.2
boto3
mypy-boto3-s3
streamlit
main.yaml file
===============
name: workflow
on:
push:
branches:
- main
paths-ignore:
- "README.md"
permissions:
id-token: write
contents: read
jobs:
integration:
name: :Continues Integration
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v3
with:
repository: Sparsha1303/Deep-Learning
token: ${{ secrets.GITHUB_TOKEN }}
ref: main
- name: Lint code
run: echo "Linting repository"
- name: Run unit tests
run: echo "Running unit tests"
push_to_registry:
name: Push Docker image to Docker hub
runs-on: ubuntu-latest
steps:
- name: Checkout out the repo
uses: actions/checkout@v3
- name: Setup Docker Build
uses: docker/setup-buildx-action@v2
- name: Login to docker hub
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
username: ${{secrets.DOCKER_USERNAME}}
password: ${{secrets.DOCKER_PASSWORD}}
- name: Extract metadata (tags,labels) for docker
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
with:
images: ${{ secrets.REGISTRY }}/${{ secrets.IMAGE_NAME }}
- name: Build and push Docker image
uses: docker/build-push-action@v2
with:
context: "{{defaultContext}}"
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
Continuous-Deployment:
needs: push_to_registry
runs-on: self-hosted
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- name: Log in to Docker Hub
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Pull images
run: |
- name: Run Docker Image to serve users
run: |
docker run -d -p 8501:8501 --name=stapp -e 'AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY_ID }}' -e 'AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_ACCESS_KEY }}' -e 'AWS_REGION=${{ secrets.AWS_REGION }}' ${{secrets.REGISTRY}}/${{ secrets.IMAGE_NAME }}:main
- name: Clean previous images and containers
run: |
docker system prune -f
我不确定我是否错误配置了EC2服务器,请帮我调试一下。谢谢!
1 个回答
0
我怀疑你遇到的问题和你安装Python包的方式有关。你确定你的仓库里有一个requirements.txt
文件,并且里面包含了streamlit
吗?
假设你的项目结构大概是这样的:
├── app.py
├── Dockerfile
└── requirements.txt
而requirements.txt
文件里包含的内容(你的版本可能会不同)是:
streamlit==1.32.2
你不需要指定streamlit
可执行文件的绝对路径,因为如果它安装成功了,系统会自动找到它。
FROM python:3.8-slim-buster
EXPOSE 8501
RUN apt-get update && \
apt-get install -y \
build-essential \
software-properties-common \
git && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY requirements.txt /app
RUN pip3 install -r requirements.txt
COPY . /app
CMD ["streamlit", "run", "app.py", "--server.port=8501", "--server.address=0.0.0.0"]
我测试过这个,结果在本地和GitHub Actions上都能正常工作。为了确认,你可以查看GitHub Actions的日志,那里应该能看到pip3 install -r requirements.txt
这一步,并且可以看到它是否在安装streamlit
包。