docker - Docker-Compose + 命令
问题描述
看来我的 docker-compose 命令只执行最后一个命令。在这种情况下运行服务器。
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/
我的码头工人撰写:
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:
- db
入口点.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
解决方案
那是因为你只能拥有一个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 cmd vs 运行的好文章:http: //goinbigdata.com/docker-run-vs-cmd-vs-entrypoint/
推荐阅读
- vba - 如何在Access数据输入表单中仅查询当前记录/行的组合框?
- excel - 如何使 VLOOKUP() 与下一个更大的值匹配?
- git - git log --since 不包括第一次提交
- fortran - 第 i 个元素后 1d 数组的最大值
- c - 使用 vfprintf.c 修复分段错误
- delphi - 如何将参数传递给 Rest 应用程序中的标头?
- javascript - Redux 使用 useSelector 从对象数组中选择一个属性
- sql - 创建动态数组
- javascript - 如何解决 POST 400 {bad Request} ReactJS
- tosca - 如何验证没有内部文本的 tosca 中的链接文本值