Use 'systemctl' para administrar el error del proceso en la ventana acoplable

Asumir un proyecto de Django del predecesor, este proyecto utiliza supervisor para la gestión de procesos durante la implementación. Para facilitar la implementación futura, intenté empaquetar el proyecto como una imagen de Docker.
El contenido del Dockerfile es el siguiente:

FROM python:3.7

ENV PYTHONUNBUFFERED 1

RUN apt-get update \
    && apt-get -y install supervisor \
    && apt-get -y install systemd\
    && mkdir -p /home/project \
    && cd /home/project \
    && mkdir static \
    && mkdir media \
    && mkdir logs

COPY ./myproject/* /home/project/
COPY ./project.conf /etc/supervisor/conf.d
RUN pip install -r /home/project/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

WORKDIR /home/project

RUN systemctl restart supervisor.service

El código del proyecto está en el directorio myproject del host.
Esta imagen primero instala supervisor y systemd; en
segundo lugar, crea un directorio de proyecto en el contenedor y crea un directorio de registro bajo el directorio;
nuevamente copia el código en el host al directorio del proyecto en el contenedor y copia el archivo de configuración del supervisor en el host a el supervisor del contenedor En el directorio de configuración;
luego instale las dependencias del proyecto y configure el espejo de origen pip doméstico;
luego especifique el directorio de trabajo en el contenedor como proyecto /, es decir, los comandos subsiguientes se ejecutan en este directorio;
finalmente, reinicie el supervisor para cargar el archivo de configuración copiado.
Genera un espejo:

$ docker build -t apollo_docker .

Pero el último paso para generar la imagen es incorrecto:

Step 8/8 : RUN systemctl restart supervisor.service
 ---> Running in 78350c856c39
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
The command '/bin/sh -c systemctl restart supervisor.service' returned a non-zero code: 1

La razón es que RUN llama a bash / y el supervisor necesita init / para llamar, por lo que puede cambiar el último comando a

CMD ["/usr/sbin/init" "systemctl" "restart supervisor.service"]

Crear de nuevo:

$ docker build -t apollo_docker .
Sending build context to Docker daemon  36.47MB
...
...
Successfully tagged apollo_docker:latest

Creado con éxito.

Supongo que te gusta

Origin blog.csdn.net/JosephThatwho/article/details/102943306
Recomendado
Clasificación