简体   繁体   中英

docker-compose exec: \“webserver\”: executable file not found in $PATH

When I run my docker-compose.yml file using docker-compose up , it outputs:

Removing airflow_webserver_1
Starting airflow_postgres_1 ... done
Recreating bfec6e557af5_airflow_webserver_1 ... error

ERROR: for bfec6e557af5_airflow_webserver_1  Cannot start service webserver: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"webserver\": executable file not found in $PATH": unknown

ERROR: for webserver  Cannot start service webserver: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"webserver\": executable file not found in $PATH": unknown
ERROR: Encountered errors while bringing up the project.

Before running docker-compose up I ran docker build. using a Dockerfile that was successful. So far i've only tried quitting, restarting Docker, and using docker system prune -a to remove docker images, containers, volumes, and networks.

Here's the Dockerfile:

FROM python:3
WORKDIR /usr/local/airflow/
COPY requirements.txt ./
RUN pip install --upgrade pip && \
    pip install --no-cache-dir -r requirements.txt
COPY . .

Here's the docker-compose.yml file:

version: '3.7'
services:
    postgres:
        image: postgres:9.6
        environment:
            - POSTGRES_USER=airflow
            - POSTGRES_PASSWORD=airflow
            - POSTGRES_DB=airflow
        logging:
            options:
                max-size: 10m
                max-file: "3"

    webserver:
        # image: puckel/docker-airflow:1.10.9
        image: puckel/docker-airflow:latest
        restart: always
        depends_on:
            - postgres
        environment:
            - LOAD_EX=n
            - EXECUTOR=Local
        logging:
            options:
                max-size: 10m
                max-file: "3"
        volumes:
            - ./dags:/usr/local/airflow/dags
            # - ./plugins:/usr/local/airflow/plugins
            - ./plugins/:/usr/local/airflow/plugins
            - ./requirements.txt:/requirements.txt
        ports:
            - "8080:8080"
        command: webserver
        healthcheck:
            test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"]
            interval: 30s
            timeout: 30s
            retries: 3

        build:
            context .
            args:
                PYTHON_DEPS: "boto3==1.12.41, notebook==6.0.3, numpy==1.18.1, pandas==0.25.3, psycopg2==2.8.4"
                AIRFLOW_DEPS: "aws, postgres"

Here's the requirement.txt file:

boto3==1.12.41
notebook==6.0.3
numpy==1.18.1
pandas==0.25.3
psycopg2==2.8.4

I have a few questions:

  1. Why you have a healthcheck and command params in you docker-compose.yml file? Are you sure you need them there and not in Dockerfile file?
  2. You building image with arguments PYTHON_DEPS and AIRFLOW_DEPS , where you are using them? Remember you are using FROM python:3 system where only python installed.
  3. image: puckel/docker-airflow:latest -- are you maintainer of this image?
  4. Can you explain WHAT you want to do in Dockerfile , becouse you just copying your filed to only python installed image.

As I understand you exstend some functionality of puckel/docker-airflow by adding your code, then you need:

  1. Use from FROM puckel/docker-airflow:latest in your Dockerfile
  2. Set you tag on to build docker build -t my-airflow.
  3. Change image value on docker-compose.yml to image: my-airflow
  4. Run it. Then everything make sense.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM