我的docker-compose命令似乎只执行最后一个命令。在本例中为runserver。
command: python3 manage.py collectstatic --noinput
command: python3 manage.py migrate --noinput
command: python3 manage.py runserver 0.0.0.0:8000我尝试将这些命令移动到一个entrypoint.sh文件中。然而,我不知道如何在我的dockerfile & docker-compose中实现它。
下面是我的dockerfile:
# Pull base image
FROM python:3
# Set environment varibles
ENV PYTHONUNBUFFERED 1
# Set work directory
RUN mkdir /code
WORKDIR /code
# Install dependencies
RUN pip install --upgrade pip
RUN pip install pipenv
COPY ./Pipfile /code/Pipfile
RUN pipenv install --deploy --system --skip-lock --dev
# Copy project
COPY . /code/我的docker-compose:
version: '3'
services:
db:
image: postgres
ports:
- "5432:5432"
web:
build: .
command: python3 manage.py collectstatic --noinput
command: python3 manage.py migrate --noinput
command: python3 manage.py runserver 0.0.0.0:8000
env_file: .env
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- dbentrypoint.sh
#!/bin/bash
# Collect static files
echo "Collect static files"
python manage.py collectstatic --noinput
# Apply database migrations
echo "Apply database migrations"
python manage.py migrate
# Start server
echo "Starting server"
python manage.py runserver 0.0.0.0:8000发布于 2018-10-23 06:23:50
这是因为您只能有一个command。
您可以组合多个命令,如下所示:
command: sh -c "python3 manage.py collectstatic --noinput && python3 manage.py migrate --noinput && python3 manage.py runserver 0.0.0.0:8000"或者,正如您提到的入口点,您可以在Dockerfile或docker-compose.yml中指定入口点。确保删除这些命令,因为您不再需要它们。
这里有一篇关于入口点vs命令vs运行的好文章:http://goinbigdata.com/docker-run-vs-cmd-vs-entrypoint/
发布于 2021-06-06 03:57:13
或者,对于Michael的回答,您可以使用文档中指出的包装器语法。
version: "2"
services:
web:
build: .
ports:
- "80:8000"
depends_on:
- "db"
command: ["./wait-for-it.sh", "db:5432", "--", "python", "app.py"]
db:
image: postgres更多信息:
https://stackoverflow.com/questions/52938508
复制相似问题