docker/docker-compose/podman 설정을 체계화하고 싶지만 systemd가 프로세스를 종료하지 않고 종료되는 서비스 단위를 제대로 처리하지 못하는 것 같습니다. 이는 문제의 도구가 프로세스 시작을 예약하지만 자체적으로 생성하거나 분기하지 않는 API를 호출하여 작동하기 때문에 문제가 됩니다. 따라서 docker-compose 호출이 반환되면 systemd에 표시되는 프로세스가 없으므로 Type/RemainAfterExit 어떤 변경 사항이라도 남아 있는 PID가 감지되지 않으므로 서비스가 중지됨/죽음/중지됨 등으로 표시됩니다.
이것이 관련이 있는지 확실하지 않지만 사용자 공간에서 실행 중입니다 --user
. 사용자에 대해 지연이 활성화되어 있습니다.
이것은 시스템을 작동시키려는 많은 시도 중 하나이지만 다른 설정 조합과 마찬가지로 5초 후에 중지됩니다.
[Unit]
Description=%u service with docker compose
BindsTo=podman.service
After=podman.service
[Service]
Environment=DOCKER_HOST=unix:///run/user/%U/podman/podman.sock
Environment=XDG_RUNTIME_DIR=/run/user/%U
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/srv/podman/%u
ExecStart=/usr/local/bin/docker-compose up -d --remove-orphans
ExecStop=/usr/local/bin/docker-compose down -v
[Install]
WantedBy=default.target
위의 파일로 시작했습니다 systemctl --user start myservice.service
. 다음과 같은 출력이 생성됩니다.
May 04 14:10:27 myhost systemd[841]: Starting myservice service with docker compose...
May 04 14:10:27 myhost docker-compose[106023]: Container nginx Creating
May 04 14:10:27 myhost docker-compose[106023]: Container nginx Created
May 04 14:10:27 myhost docker-compose[106023]: Container nginx Starting
May 04 14:10:27 myhost docker-compose[106023]: Container nginx Started
May 04 14:10:27 myhost systemd[841]: Finished myservice service with docker compose.
May 04 14:10:32 myhost systemd[841]: Stopping myservice service with docker compose...
May 04 14:12:03 myhost systemd[841]: myservice.service: Stopping timed out. Terminating.
May 04 14:12:03 myhost systemd[841]: myservice.service: Failed with result 'timeout'.
May 04 14:12:03 myhost systemd[841]: myservice.service: Unit process 106072 (docker-compose) remains running after unit stopped.
May 04 14:12:03 myhost systemd[841]: Stopped myservice service with docker compose.
May 04 14:12:03 myhost docker-compose[106072]: Container nginx Stopping
May 04 14:12:03 myhost docker-compose[106072]: Container nginx Stopped
May 04 14:12:03 myhost docker-compose[106072]: Container nginx Removing
May 04 14:12:03 myhost docker-compose[106072]: Container nginx Removed
답변1
docker-compose
을 실행할 때 올바르게 추적할 수 있도록 프로세스를 데몬화( 해당 옵션을 제거 ) systemd
하고 싶지 않을 것입니다 .-d
ExecStart
systemd
기본값이 서비스에 적합해야 하므로 선언 Type=
이나 옵션도 필요하지 않을 수 있습니다 .RemainAfterExit=
docker-compose
단일 컨테이너를 제공하려면 podman generate systemd
컨테이너 중 하나의 출력을 살펴보고 Docker 서비스 파일을 다음과 같이 조정하는 것이 좋습니다.
또 다른 참고 사항: podman.service
에서 호출되므로 계속 실행하면 안 됩니다 podman.socket
. After=
참조 설정이 podman.socket
원하는 동작에 더 가까울 수 있습니다. 해당 BindsTo=
옵션이 귀하가 찾고 있는 것인지 잘 모르겠습니다 . podman.socket
명령을 실행하는 데는 필요 하지만 docker-compose
컨테이너를 실행하는 데는 필수가 아니며 Podman API가 다시 시작될 때 모든 컨테이너를 다시 시작하려는 것인지 잘 모르겠습니다.
요약하면 게시된 서비스 파일은 다음과 같습니다.
[Unit]
Description=%u service with docker compose
After=podman.socket
[Service]
Environment=DOCKER_HOST=unix:///run/user/%U/podman/podman.sock
Environment=XDG_RUNTIME_DIR=/run/user/%U
WorkingDirectory=/srv/podman/%u
ExecStart=/usr/local/bin/docker-compose up --remove-orphans
ExecStop=/usr/local/bin/docker-compose down -v
[Install]
WantedBy=default.target
이것은 달리고 건너는 나의 podman
경험 docker-compose
입니다 systemd
. 이들 중 일부가 귀하의 컨테이너 제작 노력에 도움이 되기를 바랍니다.