【问题标题】:Docker compose executable file not found in $PATH": unknownDocker 撰写在 $PATH 中找不到的可执行文件”:未知
【发布时间】:2020-03-31 06:07:22
【问题描述】:

但我遇到了问题。

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: 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

一开始我以为 Python Manage 是错的。

但我尝试了命令ls,令我惊讶的是,我成功了。

然后我尝试了 ls -al 命令,但是失败了。

我认为添加写入空间的命令会导致问题。

我该如何解决?

【问题讨论】:

  • 尝试从你的 DockerFile 运行 runserver 命令作为入口点
  • @Kendoka 那我可以把 Compose.yml 中的命令取出来吗?
  • 如果在 DockerFile 中将其作为 ENTRYPOINT 运行,则可以在 compose 文件中取出命令。
  • 您需要删除 COPY 。 /code/ 来自您的 dockerfile,因为它在 compose 中定义

标签: python django docker docker-compose


【解决方案1】:

当您在docker-compose.yml 文件中使用列表语法时,每个项目都被视为一个单词。您正在运行的 shell 相当于

'python3 manage.py runserver'

您可以自己将其分解为单独的单词

command:
  - python3
  - manage.py
  - runserver

或者让 Docker Compose 为您完成这项工作

command: python3 manage.py runserver

一般来说,像这样的图像的固定属性应该在 Dockerfile 中指定,而不是在docker-compose.yml 中。每次运行此映像时,您都将要运行相同的命令,并且您将要运行内置于映像中的代码。有两种语法,基本区别相同:

# 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

使用图像中内置的代码和其中定义的合理默认命令,您可以从docker-compose.yml 文件中删除volumes:command:

【讨论】:

    猜你喜欢
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2019-01-16
    • 2015-01-25
    • 1970-01-01
    • 2021-11-23
    相关资源
    最近更新 更多