在GitHub Actions运行Docker容器时未找到Streamlit

-1 投票
1 回答
69 浏览
提问于 2025-04-14 15:56

这是在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

这是GitHub Actions持续部署错误的快照

我不确定我是否错误配置了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包。

在这里输入图片描述

撰写回答