이미지를 만들었어요도커파일이것은데비안 책벌레사용자 인터페이스 포함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이 실행 중인지 확인하고 그렇지 않은 경우 시작하는 기능이 포함되어 있습니다. 이렇게 하면 컨테이너가 다시 시작될 때 필요한 서비스가 시작됩니다.