簡體   English   中英

Docker Ubuntu 上的未知命令 bash 或 /bin/bash:20.04 與 docker-compose 版本 3.5

[英]Uknown command bash or /bin/bash on Docker Ubuntu:20.04 with docker-compose version 3.5

我正在使用 Django 應用程序設置 docker,但bash命令不適用於 docker Ubuntu:20.04和 docker-compose version 3.5

我的Docker version 20.10.7, build f0df350版本是Docker version 20.10.7, build f0df350Docker version 20.10.7, build f0df350 -compose 版本是Docker Compose version 2.0.0-beta.4

誰能幫我解決這個問題?

以下是我的 docker 文件:

Dockerfile:

FROM ubuntu:20.04

ENV PYTHONUNBUFFERED 1

RUN apt-get -y update
RUN apt-get install -y --no-install-recommends default-libmysqlclient-dev
RUN apt-get install -y gcc git libc-dev python3-dev python3-pip
RUN ln -s /usr/bin/python3 /usr/bin/python

RUN mkdir /app
WORKDIR /app
ADD . /app

RUN pip install --upgrade pip && pip install -r requirements.txt

EXPOSE 8000

ENTRYPOINT [ "/app/manage.py" ]

docker-compose.yml

version: '3.5'
services:
  db:
    image: mysql:5.6
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: "mydb"
      MYSQL_ROOT_PASSWORD: "root"
    volumes:
      - mysql_data:/var/lib/mysql
    restart: always
    networks:
      default:
        aliases:
          - app-db

  
  django:
    build: .
    command: bash -c "while true; do runserver 0.0.0.0:8000; sleep 10; done"
    stdin_open: true
    tty: true
    volumes:
      - .:/app
    depends_on:
      - db
    ports:
      - "8000:8000"
    restart: always
    environment:
      MYSQL_DATABASE: "mydb"
      MYSQL_USER: "root"
      MYSQL_ROOT_PASSWORD: "root"
      MYSQL_HOST: "app-db"

volumes:
    mysql_data: {}

運行docker-compose up --build時出現命令錯誤:

bash -c "while true; do runserver 0.0.0.0:8000; sleep 10; done"

錯誤:未知命令:'bash'

提前致謝

當你運行容器時, ENTRYPOINTCMD被組合成一個命令; 如果命令部分被 Docker Compose 覆蓋並不重要,容器仍然以這種方式只運行一個命令。 所以實際上你要求主容器進程是

/app/manage.py bash -c "while true; do runserver 0.0.0.0:8000; sleep 10; done"

抱怨是 Django runner 不理解manage.py bash作為子命令。

在您的 Dockerfile 本身中,您可能希望默認命令是啟動服務器。 ENTRYPOINT作為任意的“命令的一半”往往會更令人困惑,並導致也需要覆蓋它; 最好把它作為標准容器CMD

# No ENTRYPOINT, but
CMD ["/app/manage.py", "runserver", "0.0.0.0:8000"]

您不需要將重啟循環放入容器命令中,因為 Docker 已經允許您為容器指定重啟策略 您應該能夠將docker-compose.yml部分修剪為:

django:
  build: .
  # command: is built into the image
  # don't usually need stdin_open: or tty:
  # don't overwrite the image code with volumes:
  depends_on:
    - db
  ports:
    - "8000:8000"
  restart: always  # replaces the "while true ... done" shell loop
  environment: *as-in-the-question

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM