![](/img/trans.png)
[英]Supervisord exits inside Docker container when run with docker-compose 'command:', but not when its run from bash
[英]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 f0df350
和Docker 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'
提前致謝
當你運行容器時, ENTRYPOINT
和CMD
被組合成一個命令; 如果命令部分被 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.