代码之家  ›  专栏  ›  技术社区  ›  hifichevymane

执行官/start.sh:没有这样的文件或目录

  •  0
  • hifichevymane  · 技术社区  · 2 年前

    我有一个Django项目,它在Docker-compose.yml中的Docker容器中运行,带有postgresql、pgadmin4和redis。我有 启动.sh 进行和运行迁移的脚本:

    start.sh:

    #!/bin/bash
    # Creating migrations if they are
    python manage.py makemigrations
    # Apply migrations
    python manage.py migrate
    

    在构建图像并运行之后 码头工人组成 命令django项目给我一个错误: 执行官/start.sh:没有这样的文件或目录 但是我的start.sh文件位于Dockerfile和docker-compose.yml所在的同一目录中。PostgreSQL、pgadmin4和Redis运行成功。如何解决这个问题?我的系统是Windows 10。

    Dockerfile :

    FROM python:3.11.3-alpine
    
    ENV PYTHONBUFFERED=1
    
    WORKDIR /code
    
    COPY requirements.txt .
    
    RUN pip install -r requirements.txt --upgrade
    
    COPY . .
    
    COPY start.sh .
    
    RUN chmod +x start.sh
    
    ENTRYPOINT [ "./start.sh" ]
    
    EXPOSE 8000
    
    CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"]
    

    docker-compose.yml :

    services:
      api:
        image: meduzzen-backend-api
        container_name: django
        tty: true
        stdin_open: true
        volumes:
          - .:/code
          - ./code:/apps
        ports:
          - "8000:8000"
        depends_on:
          - postgres-db
          - redis
        env_file:
          - .env
        networks:
          - api-db-redis
    
      postgres-db:
        image: postgres:latest
        container_name: postgres_db
        ports:
          - "5432:5432"
        volumes:
          - data:/var/lib/postgresql/data
        env_file:
          - .env
        networks:
          api-db-redis:
            # Have access the database using pgadmin4
            ipv4_address: 172.24.0.6
    
      pg-admin:
        image: dpage/pgadmin4:latest
        container_name: pg_admin
        env_file:
          - .env
        ports:
          - "5050:5050"
        networks:
          - api-db-redis
    
      redis:
        image: redis:latest
        container_name: redis_cache
        ports:
          - "6379:6379"
        networks:
          - api-db-redis
    
    volumes:
      data:
    
    networks:
      api-db-redis:
        ipam:
          driver: default
          config:
            - subnet: 172.24.0.0/24
    

    我试着添加 \r 在start.sh指令的末尾。更改Dockerfile中的文件目标。

    1 回复  |  直到 2 年前
        1
  •  1
  •   Hans Kilian    2 年前

    你的问题是,你使用的是阿尔卑斯山的图像,而他们没有 bash 默认情况下已安装。

    在脚本的第一行中,您已经指示应该使用 猛击 因此它失败了。

    将脚本中的第一行更改为

    #!/bin/sh 
    

    它会起作用的。

    需要注意的一点是,Docker在容器启动时只运行一个命令。当同时具有ENTRYPOINT和CMD时,它们会连接到一个命令中。在您的情况下,命令是

    ./start.sh python3 manage.py runserver 0.0.0.0:8000
    

    我认为你认为它们将作为两个独立的命令运行。他们不会。