Elsebet
Estoy usando WSL2 en Windows 10. Tengo la mayoría de WSL v1.0.3 que permite systemd (systemctl) y estoy usando Ubuntu 20.04 como mi distribución predeterminada.
Tengo un Dockerfile en funcionamiento para crear una imagen de Debian con systemd habilitado. Funciona perfectamente bien. Lo encontré en este enlace: https://github.com/robertdebock/docker-debian-systemd.
Sin embargo, se me encargó rehacer este Dockerfile en Packer, ya que Packer es nuestro estándar para crear imágenes en lugar de Dockerfiles. Tengo problemas porque aunque siento que he copiado todo, desde Dockerfile en mi código HCL2, cuando ejecuto el contenedor en docker-compose aparece diciendo que systemctl no está disponible. systemd definitivamente está instalado en la imagen del empaquetador.
Aquí está mi código HCL2:
packer {
required_plugins {
docker = {
version = ">= 0.0.7"
source = "github.com/hashicorp/docker"
}
}
}
source "docker" "debian" {
image = "debian:11"
commit = true
changes = [
"ENV container docker",
"ENV DEBIAN_FRONTEND noninteractive",
"VOLUME /sys/fs/cgroup"
]
}
build {
name = "${var.docker_login_server}/mycompany-debian-11-docker"
sources = [
"source.docker.debian"
]
provisioner "shell" {
environment_vars = []
inline = [
"apt-get update",
"apt-get install --no-install-recommends -y systemd systemd-sysv procps sudo ca-certificates unzip wget curl",
"apt-get clean",
"curl 'https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip' -o 'awscliv2.zip'",
"unzip awscliv2.zip",
"sudo ./aws/install",
"sudo adduser --disabled-password --gecos '' admin",
"rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*",
"rm -rf /lib/systemd/system/multi-user.target.wants/*",
"rm -rf /etc/systemd/system/*.wants/*",
"rm -rf /lib/systemd/system/local-fs.target.wants/*",
"rm -rf /lib/systemd/system/sockets.target.wants/*udev*",
"rm -rf /lib/systemd/system/sockets.target.wants/*initctl*",
"rm -rf /lib/systemd/system/sysinit.target.wants/systemd-tmpfiles-setup*",
"rm -rf /lib/systemd/system/systemd-update-utmp*"
]
}
post-processors {
post-processor "docker-tag" {
repository = "${var.docker_login_server}/mycompany-debian-11-docker"
tags = ["11"]
}
post-processor "docker-push" {
login = true
login_username = "${var.docker_login_username}"
login_password = "${var.docker_login_password}"
login_server = "${var.docker_login_server}"
keep_input_artifact = false
}
}
}
Tenga en cuenta lo anterior, si agrego esta línea a la fuente -> cambios[] sección, cuando intento ejecutar la imagen, falla con un error de sintaxis (abajo), así que la eliminé por ahora.
"CMD /lib/systemd/systemd"
Error de contenedor: /bin/sh: 1: Error de sintaxis: “(” inesperado
Una vez que la imagen se compila con éxito en Packer y se envía a nuestro repositorio de imágenes interno, utilizo docker-compose para ejecutarlo de esta manera:
services:
debian:
container_name: debian
image: {internalRepoUrl}/mycompany-debian-11-docker:11
tty: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
privileged: true
Cuando abro una terminal en el contenedor e intento ejecutar systemctl, aparece este error:
El sistema no se ha iniciado con systemd como sistema de inicio (PID 1). No puedo operar. No se pudo conectar al bus: el host está inactivo
Sin embargo, si ejecuto la imagen creada con Dockerfile, funciona bien. Parece que simplemente hay algo que debo hacer en mi Packer HCL que no es obvio para mí. ¿Alguien tiene alguna sugerencia?
Consulte la descripción del problema anterior. Intenté replicar lo que funciona en un Dockerfile en Packer. Esperaba que la instancia de Debian apareciera con systemctl funcionando, de manera similar a como lo hace cuando creo la imagen usando el Dockerfile al que se hace referencia en el enlace anterior.