Debian 컨테이너에 원격으로 연결할 때 특정 오류가 발생합니다(xrdp 및 sesman)

Debian 컨테이너에 원격으로 연결할 때 특정 오류가 발생합니다(xrdp 및 sesman)

이미지를 만들었어요도커파일이것은데비안 책벌레사용자 인터페이스 포함XFCE그리고 어디서 연결하는지작성자: xrdp(원격 데스크탑).

이 문제를 해결해 보겠습니다.

내가새로운 컨테이너그럼 이 사진으로로그인할 수 있어요UI에 RDP를 사용하고,또한 로그아웃그리고다시 로그인하세요. 내가 할 때만재시작컨테이너에 다시 로그인하려고 합니다(xrdp 페이지) 그러면 sesman 오류가 발생합니다(이상하게도 sesman은 그렇지 않습니다).활동/시작).

하지만 만약 내가테이스만 시작모든 것이 "/usr/sbin/xrdp-sesman"정상으로 돌아옵니다~까지재시작컨테이너.

이것은 내 쪽의 논리적 오류입니까? 또는 이것은 sesman의 알려진 문제입니다.

도커 파일:

#use the debian bookworm image
FROM debian:bookworm

#update all package directories
RUN apt update

#install all needed programs like
#XFCE for UI
#xrdp for connecting via RemoteDesktop
#dbus-x11 for that you can connect to the desktop at all (otherwise the connection w>
#xfce4-goodies for the Xfce4 Desktop Environment (https://packages.debian.org/de/sid>
RUN apt install -y xrdp xfce4 dbus-x11

#install usefull tools like: nano, wget, curl and sudo
RUN apt install -y nano wget curl sudo

#FIX: removed the annoying screen "Plugin "Power Manager Plugin" unexpectedly left t>
RUN apt remove xfce4-power-manager-plugins -y

#clean up
RUN apt clean && apt autoremove -y

#create default user called "user", with password "changeme"
RUN useradd -m -s /bin/bash -p $(openssl passwd -1 changeme) user

#copy files
COPY /data/startScript.sh /

#make the start script runable
RUN chmod +x /startScript.sh

#expose the RDP port
EXPOSE 3389

#start the start script and run the container
CMD ["/startScript.sh"]

시작 스크립트

#!/bin/bash

#start the xrdp session manager
/usr/sbin/xrdp-sesman

#start xrdp overall
/usr/sbin/xrdp -n

사용자 데이터:

Username => user
Password => changeme

복사하여 붙여넣기 명령:

docker build -t debianxfcerdp .
docker run -d -p 3399:3389 --name test01 debianxfcerdp 

답변1

Docker 컨테이너의 xrdp에서 발생하는 문제는 컨테이너 내의 서비스가 시작되고 관리되는 방식과 관련이 있을 수 있습니다. 컨테이너가 다시 시작되면 xrdp-sesman 서비스가 자동으로 트리거되지 않아 연결이 실패할 수 있습니다. 이것이 아마도 sesman을 수동으로 시작하면 컨테이너가 다시 시작될 때까지 문제가 해결되는 이유일 것입니다.

가능한 해결책 중 하나는 컨테이너가 초기화될 때 기본 서비스(예: xrdp-sesman)가 시작되도록 Docker 컨테이너의 진입점 또는 시작 스크립트를 재구성하는 것입니다. 이를 위해서는 컨테이너 내의 프로세스 관리자나 스크립트를 통해 관리해야 할 수도 있습니다.

Dockerfile에서 조정한 내용은 다음과 같습니다.

#copy the startup script into the container
COPY startScript.sh /usr/local/bin/startScript.sh

#grant execute permissions to the script
RUN chmod +x /usr/local/bin/startScript.sh

# Set the script as entry point to run on container start
ENTRYPOINT ["/usr/local/bin/startScript.sh"]

또한 xrdp 서비스를 올바르게 시작하려면 startScript.sh를 수정해야 합니다.

#!/bin/bash

# Function to check and start the sesman service if not running
start_sesman() {
    if ! pgrep -x "xrdp-sesman" > /dev/null; then
        echo "xrdp-sesman not running. Starting sesman..."
        /usr/sbin/xrdp-sesman
    else
        echo "xrdp-sesman is already running."
    fi
}

# Start sesman
start_sesman

# Start xrdp
/usr/sbin/xrdp -n

이 조정된 설정은 컨테이너의 진입점으로 startScript.sh를 시작합니다. xrdp-sesman이 실행 중인지 확인하고 그렇지 않은 경우 시작하는 기능이 포함되어 있습니다. 이렇게 하면 컨테이너가 다시 시작될 때 필요한 서비스가 시작됩니다.

관련 정보