"systemd --user"단위 파일에서 Docker 컨테이너 (아마도 방금 발견 한 https://github.com/ibuildthecloud/systemd-docker 사용 )를 시작합니다. 나는 그들이 시작할 때 시작하기를 원합니다.
문제는 After=docker.service
systemd 사용자 모드 단위가 systemd 시스템 모드 단위를 볼 수 없기 때문에 할 수 없다는 것 입니다.
누구든지 이것을 고칠 좋은 방법이 있습니까?
지금까지 내가 가진 "최고의"아이디어는 "docker info"가 합리적인 것을 반환 할 때까지 잠자기 루프를 실행하는 스크립트를 실행하는 한 번만 실행되는 시스템 단위를 만드는 것입니다. 그런 다음 After = 그게 나쁘게 보입니다. 방법.
이 문제에 대한 한 가지 좋은 해결책은 ( systemd 의 시스템 인스턴스에서 실행되는) Docker 데몬이 소켓 활성화를 사용하도록하는 것입니다.
이렇게하면 docker 명령 (예 : 사용자 systemd 단위에서) 을 시작할 때 연결할 소켓이 있지만 Docker 데몬이 실제로 서비스를 제공 할 준비가 될 때까지 차단됩니다.
명시 적 종속성을 제거하기위한 소켓 활성화의 기본 아이디어는 systemd 블로그의이 기사에 설명되어 있습니다. 이 기사에서는 전통적으로 명시 적 종속성을 통해 처리되었지만 소켓 활성화를 통해 더 이상 구성 할 필요가없는 네 가지 서비스에 대해 설명합니다. 다음은 발췌입니다 (길지만 실제로 요점을 만듭니다).
소켓 활성화를 사용하면 어떤 종류의 순서도없이 4 개의 서비스를 모두 동시에 시작할 수 있습니다. 리스닝 소켓 생성이 데몬 외부로 이동하기 때문에 동시에 모두 시작할 수 있으며 서로의 소켓에 바로 연결할 수 있습니다. 즉, 단일 단계에서
/dev/log
및/run/dbus/system_bus_socket
소켓이 생성되고 다음 단계에서는 4 개의 서비스가 모두 동시에 생성됩니다. 그런 다음 D-Bus가 syslog에 기록하려고 할 때 메시지를/dev/log
. 소켓 버퍼가 꽉 차지 않는 한 초기화를 위해 원하는 다른 작업을 즉시 진행할 수 있습니다. syslog 서비스가 따라 잡자마자 대기중인 메시지를 처리합니다. 소켓 버퍼가 가득 차면 소켓에 다시 쓸 수있을 때까지 클라이언트 로깅이 일시적으로 차단되고 로그 메시지를 쓸 수있는 순간 계속됩니다. 즉, 서비스 예약은 전적으로 커널에 의해 수행됩니다. 사용자 공간 관점에서 모든 서비스가 동시에 실행되고 한 서비스가 필요한 서비스를 유지할 수없는 경우 다른 서비스가 필요한 경우 일시적으로 차단되지만 즉시 계속됩니다. 이러한 요청이 발송됩니다. 이 모든 것은 완전히 자동이며 사용자 공간에는 보이지 않습니다. 따라서 소켓 활성화를 통해 스타트 업을 대폭 병렬화 할 수 있습니다. 이전에는 엄격하게 직렬화가 필요하다고 생각했던 서비스를 동시에 시작할 수 있습니다. 대부분의 Linux 서비스는 소켓을 통신 채널로 사용합니다. 소켓 활성화를 통해 이러한 채널의 클라이언트와 서버를 동시에 시작할 수 있습니다.
Docker 데몬은 2014 년부터 소켓 활성화를 지원 하므로 사용중인 버전이 이미 지원할 가능성이 높습니다.
배포판이 docker.socket
장치를 배송하는지 확인합니다 .이 경우 활성화하기 만하면됩니다.
Docker 데몬이 소켓 활성화를 지원하지만 배포에 docker.socket
단위 가 포함되어 있지 않은 경우 설정 방법에 대한 지침 은 이 자습서 를 참조하십시오.
고려해야 할 또 다른 대안은 Docker에서 podman 으로 전환하는 것 입니다.
(당신은 단순히 교체, 같은 명령 줄을 사용할 수 있도록 Podman 시도는 드롭 인 (drop-in) 호환 대체 부두 노동자를위한 일하기 docker
에 podman
.)
이들의 주요 차이점은 podman에는 데몬이 필요하지 않기 때문에 컨테이너를 시작하기 전에 데몬이 작동 할 때까지 기다릴 필요가 없다는 것입니다. Podman은 최신 버전의 Linux 배포에서 패키지로 제공됩니다. 그것과 docker
오늘 사용하는 그대로 사용할 수 있다는 사실은 그것을 쉽게 시작할 수 있도록합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다