简体   繁体   中英

Docker compose executable file not found in $PATH": unknown

but I'm having a problem.

Dockerfile:

FROM python:3
ENV PYTHONUNBUFFERED 0
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/

compose.yml :

version: '3'

services:
  db:
    image: postgres
    volumes:
      - ./docker/data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=sampledb
      - POSTGRES_USER=sampleuser
      - POSTGRES_PASSWORD=samplesecret
      - POSTGRES_INITDB_ARGS=--encoding=UTF-8

  django:
    build: .
    environment:
      - DJANGO_DEBUG=True
      - DJANGO_DB_HOST=db
      - DJANGO_DB_PORT=5432
      - DJANGO_DB_NAME=sampledb
      - DJANGO_DB_USERNAME=sampleuser
      - DJANGO_DB_PASSWORD=samplesecret
      - DJANGO_SECRET_KEY=dev_secret_key
    ports:
      - "8000:8000"
    command:
      - python3 manage.py runserver
    volumes:
      - .:/code

error :

ERROR: for django  Cannot start service django: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"python3 manage.py runserver\": executable file not found in $PATH": unknown

At first, I thought Python Manage was wrong.

But i tried command ls , To my surprise, I succeeded.

Then I tried the ls -al command, but it failed.

I think the addition of a command to write space is causing a problem.

how can i fix it ?

When you use list syntax in the docker-compose.yml file, each item is taken as a word. You're running the shell equivalent of

'python3 manage.py runserver'

You can either break this up into separate words yourself

command:
  - python3
  - manage.py
  - runserver

or have Docker Compose do it for you

command: python3 manage.py runserver

In general fixed properties of the image like this should be specified in the Dockerfile, not in the docker-compose.yml . Every time you run this image you're going to want to run this same command, and you're going to want to run the code built into the image. There are two syntaxes, with the same basic difference:

# Explicitly write out the words
CMD ["python3", "manage.py", "runserver"]

# Docker wraps in sh -c '...' which splits words for you
CMD python3 manage.py runserver

With the code built into the image and a reasonable default command defined there, you can delete the volumes: and command: from your docker-compose.yml file.

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