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.
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:
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.