es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error al ejecutar systemctl para iniciar el servicio en Amazon Linux 2.

Estoy tratando de construir un servidor Apache/PHP simple utilizando la imagen de Amazon Linux 2. Tengo lo siguiente:

Dockerfile

FROM amazonlinux:2

RUN amazon-linux-extras install epel -y && \
    amazon-linux-extras install php7.4 -y && \
    yum update -y && \
    yum install httpd -y

COPY --chown=root:root docker/script/startup /startup

ENTRYPOINT /startup

startup

#!/usr/bin/env bash

mkdir -p /run/dbus              # Añadido esto basado en otra pregunta de SO
dbus-daemon --system            # Añadido esto basado en otra pregunta de SO

systemctl enable dbus           # Añadido esto basado en otra pregunta de SO
systemctl start dbus            # Añadido esto basado en otra pregunta de SO
systemctl status dbus           # Añadido esto basado en otra pregunta de SO

systemctl enable httpd
systemctl start httpd
systemctl status httpd

/bin/bash

docker-compose.yml

web:
  build: .
  container_name: "${APP_NAME}-app"
  environment:
    VIRTUAL_HOST: "${WEB_HOST}"
  env_file:
    - ./.env-local
  working_dir: "/${APP_NAME}/app"
  restart: "no"
  privileged: true              # Añadido esto basado en otra pregunta de SO
  volumes:
    - "./app:/${APP_NAME}/app:ro"
    - ./docker:/docker
    - "./conf:/${APP_NAME}/conf:ro"
    - "./vendor:/${APP_NAME}/vendor:ro"
    - "./conf:/var/www/conf:ro"
    - "./web:/var/www/html/"
  depends_on:
    - composer

Lo ejecuto con el siguiente comando:

docker run -it web bash

Y esto es lo que me muestra:

Failed to get D-Bus connection: Operation not permitted
Failed to get D-Bus connection: Operation not permitted
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service, pointing to /usr/lib/systemd/system/httpd.service.
Failed to get D-Bus connection: Operation not permitted
Failed to get D-Bus connection: Operation not permitted

No entiendo por qué estoy obteniendo esto o cómo resolverlo.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema es que los contenedores de Docker no tienen acceso al sistema de inicio systemd, que es necesario para interactuar con servicios como dbus o httpd. Por lo tanto, intentar iniciar estos servicios utilizando systemctl no funcionará dentro de un contenedor de Docker.

    En su lugar, puede utilizar el servidor web Apache y PHP directamente en su contenedor de Docker. Puede eliminar los comandos relacionados con systemd de su secuencia de inicio y reemplazarlos por lo siguiente:

    #!/usr/bin/env bash
    
    httpd
    
    /bin/bash
    

    Esto debería iniciar el servidor web Apache dentro del contenedor sin utilizar systemd. Es posible que también deba modificar su Dockerfile para copiar sus archivos web en el directorio apropiado para que Apache los sirva.

    Alternativamente, puede utilizar una imagen base diferente que admita systemd, como la imagen oficial de CentOS. Sin embargo, generalmente no se recomienda ejecutar systemd dentro de un contenedor debido a diversas limitaciones y preocupaciones de seguridad.

Comments are closed.