আপনি কীভাবে ডকার পাত্রে জিইউআই অ্যাপ্লিকেশনগুলি চালাতে পারেন ?
vncserver
ফায়ারফক্স বলতে চারপাশে একটি অতিরিক্ত স্পিডবাম্প স্যান্ডবক্স যুক্ত করুন - উদাহরণস্বরূপ - এমন কোনও চিত্র রয়েছে যা সেট আপ হয়েছে বা এমন কোনও কিছু রয়েছে যা আপনি করতে পারেন?
আপনি কীভাবে ডকার পাত্রে জিইউআই অ্যাপ্লিকেশনগুলি চালাতে পারেন ?
vncserver
ফায়ারফক্স বলতে চারপাশে একটি অতিরিক্ত স্পিডবাম্প স্যান্ডবক্স যুক্ত করুন - উদাহরণস্বরূপ - এমন কোনও চিত্র রয়েছে যা সেট আপ হয়েছে বা এমন কোনও কিছু রয়েছে যা আপনি করতে পারেন?
উত্তর:
আপনি কেবল ফায়ারফক্সের সাথে একটি ভিএনসিভার সার্ভার ইনস্টল করতে পারেন :)
আমি একটি চিত্র, ভিএনসি / ফায়ারফক্স এখানে ঠেলেছি: docker pull creack/firefox-vnc
চিত্রটি এই ডকফাইফিল দিয়ে তৈরি করা হয়েছে:
# Firefox over VNC
#
# VERSION 0.1
# DOCKER-VERSION 0.2
FROM ubuntu:12.04
# Make sure the package repository is up to date
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN apt-get update
# Install vnc, xvfb in order to create a 'fake' display and firefox
RUN apt-get install -y x11vnc xvfb firefox
RUN mkdir ~/.vnc
# Setup a password
RUN x11vnc -storepasswd 1234 ~/.vnc/passwd
# Autostart firefox (might not be the best way to do it, but it does the trick)
RUN bash -c 'echo "firefox" >> /.bashrc'
এটি পাসওয়ার্ড সহ ভিএনসি চালিত একটি ডকার ধারক তৈরি করবে 1234
:
ডকার সংস্করণ 18 বা আরও নতুনের জন্য:
docker run -p 5900:5900 -e HOME=/ creack/firefox-vnc x11vnc -forever -usepw -create
ডকার সংস্করণ 1.3 বা আরও নতুনের জন্য:
docker run -p 5900 -e HOME=/ creack/firefox-vnc x11vnc -forever -usepw -create
সংস্করণ 1.3 এর আগে ডকারের জন্য:
docker run -p 5900 creack/firefox-vnc x11vnc -forever -usepw -create
docker inspect <container id>
কেবল বা কেবলমাত্র docker ps
, তারপরে আপনি সন্ধান পেয়েছেন এমন বন্দরের সাথেই আপনি আপনার হোস্টের
Xauthority নতুন সিস্টেমে একটি সমস্যা হয়ে ওঠে। আমি আমার ডকারের পাত্রে চালানোর আগে xhost + এর সাথে কোনও সুরক্ষা বাতিল করতে পারি, বা আমি একটি ভাল প্রস্তুত Xauthority ফাইলে পাস করতে পারি। সাধারণ Xauthority ফাইলগুলি হোস্টনাম নির্দিষ্ট। ডকারের সাথে, প্রতিটি ধারকের আলাদা আলাদা হোস্টের নাম থাকতে পারে (ডকার রান -h এর সাথে সেট করা), তবে এমনকি হোস্ট সিস্টেমের সাথে কনটেইনারটির হোস্টনামটি সেট করা আমার ক্ষেত্রে সহায়তা করতে পারেনি। xeyes (আমি এই উদাহরণটি পছন্দ করি) কেবল ম্যাজিক কুকিকে উপেক্ষা করে সার্ভারে কোনও শংসাপত্র সরবরাহ করবে না। সুতরাং আমরা একটি ত্রুটি বার্তা পেয়েছি 'কোনও প্রোটোকল নির্দিষ্ট করা যায় না প্রদর্শনটি খুলতে পারে না'
Xauthority ফাইলটি এমনভাবে লেখা যেতে পারে যাতে হোস্টনামের বিষয়টি বিবেচনা না করে। আমাদের প্রমাণীকরণ পরিবারকে 'ফ্যামিলিওয়াল্ড' এ সেট করতে হবে। আমি নিশ্চিত নই, যদি এর জন্য xauth এর একটি সঠিক কমান্ড লাইন থাকে, তবে এখানে একটি উদাহরণ যা জাওথ এবং সেডের সাথে এটি করার জন্য সংযুক্ত করে। আমাদের তালিকাভুক্ত ফলাফলের প্রথম 16 টি বিট পরিবর্তন করতে হবে। ফ্যামিলিওয়াল্ডের মান 65535 বা 0xffff।
docker build -t xeyes - << __EOF__
FROM debian
RUN apt-get update
RUN apt-get install -qqy x11-apps
ENV DISPLAY :0
CMD xeyes
__EOF__
XSOCK=/tmp/.X11-unix
XAUTH=/tmp/.docker.xauth
xauth nlist :0 | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -
docker run -ti -v $XSOCK:$XSOCK -v $XAUTH:$XAUTH -e XAUTHORITY=$XAUTH xeyes
-v $XSOCK:$XSOCK -v $XAUTH:$XAUTH
সংক্ষিপ্ত করা যেতে পারে-v $XSOCK -v $XAUTH
:0
সঙ্গে $DISPLAY
। তার মানে xauth nlist $DISPLAY | ...
এবং docker run -ti -e DISPLAY=$DISPLAY ...
। সাধারণত এক্স ডিসপ্ল থাকে :0
তবে সর্বদা হয় না (এবং বিশেষত আপনি যদি এসএসএক্স-এক্স এর মাধ্যমে সংযুক্ত হন তবে তা নয়)।
/tmp/.docker.xauth
নিয়ে ফাইলটি তৈরি করে 600
। এর ফলে ডকার পাত্রে ফাইলটি পড়তে পারা যায় না inside আপনি xauth list
ডকারের ধারক মধ্যে চালিয়ে যাচাই করতে পারেন । আমি এটিকে সমাধান করার chmod 755 $XAUTH
জন্য xauth nlist :0 | ...
কমান্ডের পরে যুক্ত করেছি ।
আমি এই ব্লগের এন্ট্রিটি সবেমাত্র পেয়েছি এবং এটি এখানে আপনার সাথে ভাগ করতে চাই কারণ আমার মনে হয় এটি করা সবচেয়ে ভাল উপায় এবং এটি এত সহজ।
http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/
পেশাদাররা:
+ ডকার পাত্রে কোনও এক্স সার্ভার স্টাফ
নেই + কোনও ভিএনসি ক্লায়েন্ট / সার্ভারের প্রয়োজন নেই
+ এক্স ফরোয়ার্ডিংয়ের সাথে কোনও এসএসএস নেই
+ আরও ছোট ডকার পাত্রে
কনস:
- হোস্টে এক্স ব্যবহার করা (নিরাপদ-স্যান্ডবক্সিংয়ের জন্য নয়)
যদি লিঙ্কটি কোনও দিন ব্যর্থ হয় তবে আমি এখানে সবচেয়ে গুরুত্বপূর্ণ অংশটি
রেখেছি: ডকফায়াইল:
FROM ubuntu:14.04
RUN apt-get update && apt-get install -y firefox
# Replace 1000 with your user / group id
RUN export uid=1000 gid=1000 && \
mkdir -p /home/developer && \
echo "developer:x:${uid}:${gid}:Developer,,,:/home/developer:/bin/bash" >> /etc/passwd && \
echo "developer:x:${uid}:" >> /etc/group && \
echo "developer ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/developer && \
chmod 0440 /etc/sudoers.d/developer && \
chown ${uid}:${gid} -R /home/developer
USER developer
ENV HOME /home/developer
CMD /usr/bin/firefox
ছবিটি তৈরি করুন:
docker build -t firefox .
এবং রান কমান্ড:
docker run -ti --rm \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
firefox
অবশ্যই আপনি রান কমান্ডের সাহায্যে এটি করতে পারেন sh -c "echo script-here"
ইঙ্গিত: অডিওর জন্য একবার দেখুন: https://stackoverflow.com/a/28985715/2835523
apt-get -y install sudo
তৈরি করতে আপনাকে ডকফাইফায়লে ইনস্টল করতে হবে /etc/sudoers.d
।
$ xhost +
ডকার ডেটা ভলিউমের সাহায্যে ধারকটির ভিতরে xorg এর ইউনিক্স ডোমেন সকেটটি প্রকাশ করা খুব সহজ।
উদাহরণস্বরূপ, এর মতো একটি ডকফায়াইল সহ:
FROM debian
RUN apt-get update
RUN apt-get install -qqy x11-apps
ENV DISPLAY :0
CMD xeyes
আপনি নিম্নলিখিত করতে পারেন:
$ docker build -t xeyes - < Dockerfile
$ XSOCK=/tmp/.X11-unix/X0
$ docker run -v $XSOCK:$XSOCK xeyes
এটি অবশ্যই এক্স-ফরওয়ার্ডিংয়ের সমান। এটি হোস্টের জাস্টারটিতে কনটেইনারটিকে সম্পূর্ণ অ্যাক্সেস দেয়, সুতরাং যদি আপনি ভিতরে থাকেন তা বিশ্বাস করেন তবেই এটি প্রস্তাবিত।
দ্রষ্টব্য: আপনি যদি সুরক্ষা সম্পর্কে উদ্বিগ্ন হন তবে আরও ভাল সমাধান হ'ল অ্যাপটিকে বাধ্যতামূলক- বা ভূমিকা-ভিত্তিক- অ্যাক্সেস নিয়ন্ত্রণে সীমাবদ্ধ রাখুন । ডকার বেশ ভাল বিচ্ছিন্নতা অর্জন করে তবে এটি ভিন্ন উদ্দেশ্যকে সামনে রেখে ডিজাইন করা হয়েছিল। আপনার উদ্বেগের সমাধানের জন্য ডিজাইন করা AppArmor , SELinux বা GRSecurity ব্যবহার করুন ।
xhost +
জন্য হোস্টটিতে ব্যবহার করুন।
xhost +local
প্রয়োজনীয় ~/.Xauthority
ফাইলটি ধারকটিতে উপলব্ধ করা আরও ভাল হবে , সুতরাং এটি নিজেই প্রমাণীকরণ করতে পারে।
Can't open display: :0
। কোন ধারনা?
xhost +si:localuser:$USER
কেবল ব্যবহারকারীটিকে ধারকটি শুরু করার অনুমতি দিয়েছিলাম।
আপনি সাবউসারটি ব্যবহার করতে পারেন: https://github.com/timthelion/subuser
এটি আপনাকে অনেক গুই অ্যাপসকে ডকারে প্যাকেজ করতে দেয়। ফায়ারফক্স এবং ইমাকগুলি এখনও পর্যন্ত পরীক্ষা করা হয়েছে। ফায়ারফক্সের সাথে, ওয়েবজিএল যদিও কাজ করে না। ক্রোমিয়াম মোটেও কাজ করে না।
সম্পাদনা: শব্দ কাজ!
সম্পাদনা 2: যেহেতু আমি প্রথমবার এটি পোস্ট করেছি, তখন সাবউসারটি অনেক বেড়েছে। এক্সপিআরএ ব্রিজিংয়ের মাধ্যমে এক্স 11 এর সাথে সংযোগের জন্য আমার কাছে এখন একটি সাবউসার.আরগ আপ এবং একটি নতুন সুরক্ষা মডেল রয়েছে ।
জর্জেন ওয়েগার্টের সবচেয়ে ভাল উত্তর রয়েছে যা উবুন্টুতে আমার পক্ষে কাজ করেছিল, তবে ওএসএক্স-এ, ডকার ভার্চুয়ালবক্সের অভ্যন্তরে চলে এবং তাই সমাধানটি আরও কিছু কাজ না করেই কাজ করে না।
আমি এই অতিরিক্ত উপাদান সঙ্গে এটি কাজ পেয়েছি:
আমি ওএসএক্সের জন্য এই উত্তরটি উন্নত করতে ব্যবহারকারীর মন্তব্যের প্রশংসা করব, এক্স এর জন্য সকেট ফরোয়ার্ডিং নিরাপদ কিনা তা আমি নিশ্চিত নই, তবে আমার উদ্দেশ্যটি কেবল স্থানীয়ভাবে ডকারের ধারক চালানোর জন্য।
এছাড়াও, স্ক্রিপ্টটি কিছুটা নাজুক যাতে আমাদের স্থানীয় ওয়্যারলেস থাকা অবস্থায় মেশিনের আইপি ঠিকানা পাওয়া সহজ নয় তাই এটি সর্বদা কিছু এলোমেলো আইপি থাকে।
আমি ধারকটি চালু করতে BASH স্ক্রিপ্টটি ব্যবহার করি:
#!/usr/bin/env bash
CONTAINER=py3:2016-03-23-rc3
COMMAND=/bin/bash
NIC=en0
# Grab the ip address of this box
IPADDR=$(ifconfig $NIC | grep "inet " | awk '{print $2}')
DISP_NUM=$(jot -r 1 100 200) # random display number between 100 and 200
PORT_NUM=$((6000 + DISP_NUM)) # so multiple instances of the container won't interfer with eachother
socat TCP-LISTEN:${PORT_NUM},reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\" 2>&1 > /dev/null &
XSOCK=/tmp/.X11-unix
XAUTH=/tmp/.docker.xauth.$USER.$$
touch $XAUTH
xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -
docker run \
-it \
--rm \
--user=$USER \
--workdir="/Users/$USER" \
-v "/Users/$USER:/home/$USER:rw" \
-v $XSOCK:$XSOCK:rw \
-v $XAUTH:$XAUTH:rw \
-e DISPLAY=$IPADDR:$DISP_NUM \
-e XAUTHORITY=$XAUTH \
$CONTAINER \
$COMMAND
rm -f $XAUTH
kill %1 # kill the socat job launched above
আমি এই পদ্ধতির সাথে কাজ করে জিজ এবং ম্যাটপ্ল্লিটিব পেতে সক্ষম।
মোবাএক্সটারমের সাথে উইন্ডোজ 7+ এ এটি কিছুটা সহজ:
run_docker.bash
:
#!/usr/bin/env bash
CONTAINER=py3:2016-03-23-rc3
COMMAND=/bin/bash
DISPLAY="$(hostname):0"
USER=$(whoami)
docker run \
-it \
--rm \
--user=$USER \
--workdir="/home/$USER" \
-v "/c/Users/$USER:/home/$USER:rw" \
-e DISPLAY \
$CONTAINER \
$COMMAND
error: XDG_RUNTIME_DIR not set in the environment.
এবং Error: cannot open display: VAIO:0.0
। আপনি কি এই জাতীয় কিছু মুখোমুখি?
হোস্ট ডিসপ্লে ভাগ করে নেওয়া: 0, অন্য কয়েকটি উত্তরে যেমন বলা হয়েছে, তার দুটি ত্রুটি রয়েছে:
xev
বা xinput
সম্ভব, এবং এর সাথে হোস্ট অ্যাপ্লিকেশনগুলির রিমোট কন্ট্রোল xdotool
।--ipc=host
)।এই সমস্যাগুলিকে সম্বোধন করে জিফায়ারে ডকার চিত্র চালানোর জন্য উদাহরণ স্ক্রিপ্টের নীচে।
--cap-drop ALL --security-opt no-new-privileges
। এছাড়াও ধারক ব্যবহারকারী মূল নয় ।স্ক্রিপ্টটি কিছু আর্গুমেন্টের প্রত্যাশা করে, প্রথমে একটি হোস্ট উইন্ডো ম্যানেজারটি এক্সেফায়ারে চালিত হবে, দ্বিতীয়টি একটি ডকার চিত্র, allyচ্ছিকভাবে একটি চিত্র কমান্ড কার্যকর করার জন্য তৃতীয়। ডকারে একটি ডেস্কটপ পরিবেশ চালাতে হোস্ট উইন্ডো ম্যানেজারের পরিবর্তে ":" ব্যবহার করুন।
জাফির উইন্ডোটি বন্ধ করে ডকারের ধারক অ্যাপ্লিকেশনগুলি সমাপ্ত করে। ডকরেড অ্যাপ্লিকেশনগুলি সমাপ্তি Xephyr উইন্ডোটি বন্ধ করে দেয়।
উদাহরণ:
xephyrdocker "openbox --sm-disable" x11docker/lxde pcmanfm
xephyrdocker : x11docker/lxde
xephyrdocker xfwm4 --device /dev/snd jess/nes /games/zelda.rom
xephyrdocker লিপি:
#! /bin/bash
#
# Xephyrdocker: Example script to run docker GUI applications in Xephyr.
#
# Usage:
# Xephyrdocker WINDOWMANAGER DOCKERIMAGE [IMAGECOMMAND [ARGS]]
#
# WINDOWMANAGER host window manager for use with single GUI applications.
# To run without window manager from host, use ":"
# DOCKERIMAGE docker image containing GUI applications or a desktop
# IMAGECOMMAND command to run in image
#
Windowmanager="$1" && shift
Dockerimage="$*"
# Container user
Useruid=$(id -u)
Usergid=$(id -g)
Username="$(id -un)"
[ "$Useruid" = "0" ] && Useruid=1000 && Usergid=1000 && Username="user$Useruid"
# Find free display number
for ((Newdisplaynumber=1 ; Newdisplaynumber <= 100 ; Newdisplaynumber++)) ; do
[ -e /tmp/.X11-unix/X$Newdisplaynumber ] || break
done
Newxsocket=/tmp/.X11-unix/X$Newdisplaynumber
# cache folder and files
Cachefolder=/tmp/Xephyrdocker_X$Newdisplaynumber
[ -e "$Cachefolder" ] && rm -R "$Cachefolder"
mkdir -p $Cachefolder
Xclientcookie=$Cachefolder/Xcookie.client
Xservercookie=$Cachefolder/Xcookie.server
Xinitrc=$Cachefolder/xinitrc
Etcpasswd=$Cachefolder/passwd
# command to run docker
# --rm created container will be discarded.
# -e DISPLAY=$Newdisplay set environment variable to new display
# -e XAUTHORITY=/Xcookie set environment variable XAUTHORITY to provided cookie
# -v $Xclientcookie:/Xcookie:ro provide cookie file to container
# -v $NewXsocket:$NewXsocket:ro Share new X socket of Xephyr
# --user $Useruid:$Usergid Security: avoid root in container
# -v $Etcpasswd:/etc/passwd:ro /etc/passwd file with user entry
# --group-add audio Allow access to /dev/snd if shared with '--device /dev/snd'
# --cap-drop ALL Security: disable needless capabilities
# --security-opt no-new-privileges Security: forbid new privileges
Dockercommand="docker run --rm \
-e DISPLAY=:$Newdisplaynumber \
-e XAUTHORITY=/Xcookie \
-v $Xclientcookie:/Xcookie:ro \
-v $Newxsocket:$Newxsocket:rw \
--user $Useruid:$Usergid \
-v $Etcpasswd:/etc/passwd:ro \
--group-add audio \
--env HOME=/tmp \
--cap-drop ALL \
--security-opt no-new-privileges \
$(command -v docker-init >/dev/null && echo --init) \
$Dockerimage"
echo "docker command:
$Dockercommand
"
# command to run Xorg or Xephyr
# /usr/bin/Xephyr an absolute path to X server executable must be given for xinit
# :$Newdisplaynumber first argument has to be new display
# -auth $Xservercookie path to cookie file for X server. Must be different from cookie file of client, not sure why
# -extension MIT-SHM disable MIT-SHM to avoid rendering glitches and bad RAM access (+ instead of - enables it)
# -nolisten tcp disable tcp connections for security reasons
# -retro nice retro look
Xcommand="/usr/bin/Xephyr :$Newdisplaynumber \
-auth $Xservercookie \
-extension MIT-SHM \
-nolisten tcp \
-screen 1000x750x24 \
-retro"
echo "X server command:
$Xcommand
"
# create /etc/passwd with unprivileged user
echo "root:x:0:0:root:/root:/bin/sh" >$Etcpasswd
echo "$Username:x:$Useruid:$Usergid:$Username,,,:/tmp:/bin/sh" >> $Etcpasswd
# create xinitrc
{ echo "#! /bin/bash"
echo "# set environment variables to new display and new cookie"
echo "export DISPLAY=:$Newdisplaynumber"
echo "export XAUTHORITY=$Xclientcookie"
echo "# same keyboard layout as on host"
echo "echo '$(setxkbmap -display $DISPLAY -print)' | xkbcomp - :$Newdisplaynumber"
echo "# create new XAUTHORITY cookie file"
echo ":> $Xclientcookie"
echo "xauth add :$Newdisplaynumber . $(mcookie)"
echo "# create prepared cookie with localhost identification disabled by ffff,"
echo "# needed if X socket is shared instead connecting over tcp. ffff means 'familiy wild'"
echo 'Cookie=$(xauth nlist '":$Newdisplaynumber | sed -e 's/^..../ffff/')"
echo 'echo $Cookie | xauth -f '$Xclientcookie' nmerge -'
echo "cp $Xclientcookie $Xservercookie"
echo "chmod 644 $Xclientcookie"
echo "# run window manager in Xephyr"
echo $Windowmanager' & Windowmanagerpid=$!'
echo "# show docker log"
echo 'tail --retry -n +1 -F '$Dockerlogfile' 2>/dev/null & Tailpid=$!'
echo "# run docker"
echo "$Dockercommand"
} > $Xinitrc
xinit $Xinitrc -- $Xcommand
rm -Rf $Cachefolder
এই স্ক্রিপ্টটি এক্স 11 ডকার উইকিতে রক্ষণাবেক্ষণ করা হয় । আরও উন্নত স্ক্রিপ্টটি এক্স 11 ডকার যা জিপিইউ ত্বরণ, ওয়েবক্যাম এবং প্রিন্টার ভাগ করে নেওয়ার মতো বৈশিষ্ট্যগুলিকে সমর্থন করে।
এখানে একটি হালকা ওজনের সমাধান যা ধারকটিতে কোনও X
সার্ভার, vnc
সার্ভার বা sshd
ডেমন ইনস্টল করা এড়ানো হবে । এটি সরলতায় কী লাভ করে তা সুরক্ষা এবং বিচ্ছিন্নতায় হারিয়ে যায়।
এটা তোলে ধরে নেয় যে আপনি ব্যবহার হোস্ট মেশিনে সংযোগ ssh
সঙ্গে X11
ফরওয়ার্ডিং।
ইন sshd
হোস্ট কনফিগারেশন, লাইন যোগ
X11UseLocalhost no
যাতে হোস্টের ফরোয়ার্ড এক্স সার্ভার পোর্টটি সমস্ত ইন্টারফেসে (কেবল নয় lo
) এবং বিশেষত ডকার ভার্চুয়াল ইন্টারফেসে খোলা থাকে docker0
।
ধারকটি যখন চালানো হয় তখন .Xauthority
ফাইলটিতে অ্যাক্সেসের প্রয়োজন হয় যাতে এটি সার্ভারের সাথে সংযোগ স্থাপন করতে পারে। এটি করার জন্য, আমরা হোস্টের হোম ডিরেক্টরিতে নির্দেশিত একটি পঠনযোগ্য কেবলমাত্র ভলিউম সংজ্ঞায়িত করি (সম্ভবত কোনও বুদ্ধিমান ধারণা নয়!) এবং সেই XAUTHORITY
অনুযায়ী চলকটি সেটও করি ।
docker run -v $HOME:/hosthome:ro -e XAUTHORITY=/hosthome/.Xauthority
এটি পর্যাপ্ত নয়, আমাদের হোস্টের কাছ থেকেও ডিসপ্লে ভেরিয়েবলটি পাস করতে হবে, তবে আইপি দ্বারা হোস্টের নামটি প্রতিস্থাপন করতে হবে:
-e DISPLAY=$(echo $DISPLAY | sed "s/^.*:/$(hostname -i):/")
আমরা একটি উপনাম সংজ্ঞায়িত করতে পারি:
alias dockerX11run='docker run -v $HOME:/hosthome:ro -e XAUTHORITY=/hosthome/.Xauthority -e DISPLAY=$(echo $DISPLAY | sed "s/^.*:/$(hostname -i):/")'
এবং এটির মতো পরীক্ষা করুন:
dockerX11run centos xeyes
.Xauthority
ফাইল নিজেই: -v $HOME/.Xauthority:/root/.Xauthority -e XAUTHORITY=/root/.Xauthority
।
X11UseLocalhost
, আপনি কমান্ডের --net=host
জন্য অতিরিক্ত বিকল্পও ব্যবহার করতে পারেন docker run
( এখানে পাওয়া যাবে )।
--net=host
এখনই খারাপ ধারণা, আপনি যদি পাত্রে কোনও পোর্ট খোলেন তবে এটি
জার্গেন ওয়েগার্টের উত্তর মূলত এই সমাধানটি জুড়ে দেওয়ার পরে , সেখানে কী বর্ণনা করা হচ্ছে তা প্রথমে আমার কাছে পরিষ্কার ছিল না। সুতরাং আমি এটি গ্রহণ করব, যদি অন্য কারও স্পষ্টতার প্রয়োজন হয়।
প্রথমে, সম্পর্কিত ডকুমেন্টেশনটি হ'ল এক্স সুরক্ষা ম্যানপেজ ।
অসংখ্য অনলাইন উত্স কেবল এক্স 11 ইউনিক্স সকেট এবং ~/.Xauthority
ফাইলটি ধারকটিতে মাউন্ট করার পরামর্শ দেয় । এই সমাধানগুলি প্রায়শই ভাগ্যের ভিত্তিতে কাজ করে, কেন এটি বোঝা যায় না, যেমন ধারক ব্যবহারকারী ব্যবহারকারীর মতো একই ইউআইডি দিয়ে শেষ হয়, সুতরাং যাদু কী অনুমোদনের প্রয়োজন নেই।
প্রথমে, Xauthority ফাইলের 0600 মোড রয়েছে, সুতরাং ধারক ব্যবহারকারী এটির ইউআইডি না থাকলে এটি পড়তে সক্ষম হবে না।
এমনকি আপনি ধারকটিতে ফাইলটি অনুলিপি করে রেখেছেন, এবং মালিকানা পরিবর্তন করলেও আরও একটি সমস্যা আছে। আপনি যদি xauth list
একই Xauthority
ফাইল সহ হোস্ট এবং ধারক চালনা করেন তবে আপনি তালিকাভুক্ত বিভিন্ন এন্ট্রি দেখতে পাবেন। এর কারণ xauth
এটি চালিত হয় তার উপর নির্ভর করে এন্ট্রিগুলিকে ফিল্টার করে।
ধারকটির এক্স ক্লায়েন্ট (যেমন জিইউআই অ্যাপ্লিকেশন) এর মতো আচরণ করবে xauth
। অন্য কথায়, এটি ব্যবহারকারীর ডেস্কটপে এক্স সেশনের জন্য যাদু কুকি দেখতে পাবে না। পরিবর্তে, এটি আপনার পূর্বে খোলা সমস্ত "রিমোট" এক্স সেশনের জন্য এন্ট্রি দেখায় (নীচে বর্ণিত)।
সুতরাং, আপনার যা করা দরকার তা হ'ল কনটেইনারটির হোস্টনাম এবং হোস্ট কুকির মতো একই হেক্স কী (যেমন আপনার ডেস্কটপে এক্স সেশন চলমান) যুক্ত করুন, যেমন:
containerhostname/unix:0 MIT-MAGIC-COOKIE-1 <shared hex key>
ধরাটি হ'ল কুকিটি xauth add
পাত্রে ভিতরে যুক্ত করতে হবে :
touch ~/.Xauthority
xauth add containerhostname/unix:0 . <shared hex key>
অন্যথায়, xauth
এটি এমনভাবে ট্যাগ করে যাতে এটি কেবল পাত্রে বাইরে দেখা যায়।
এই আদেশের বিন্যাসটি হ'ল:
xauth add hostname/$DISPLAY protocol hexkey
যেখানে প্রোটোকল .
প্রতিনিধিত্ব করে MIT-MAGIC-COOKIE-1
।
দ্রষ্টব্য: ধারকটিতে অনুলিপি বা আবদ্ধ করার দরকার নেই .Xauthority
। যেমন দেখানো হয়েছে তেমন একটি ফাঁকা ফাইল তৈরি করুন এবং কুকি যুক্ত করুন।
জার্জেন ওয়েজার্টের উত্তরটি FamilyWild
হোস্টে একটি নতুন কর্তৃপক্ষ ফাইল তৈরি করতে এবং কনটেইনারটিতে অনুলিপি করতে সংযোগের ধরণটি ব্যবহার করে এটি পেয়ে যায়। মনে রাখবেন এটি ~/.Xauthority
ব্যবহার করা থেকে বর্তমান এক্স সেশনের জন্য হেক্স কীটি প্রথম বের করে xauth nlist
।
সুতরাং প্রয়োজনীয় পদক্ষেপগুলি হ'ল:
FamilyWild
সংযোগের ধরণের সাথে একটি কুকি তৈরি করুন ) সহ ধারকটিতে একটি নতুন Xauthority ফাইল তৈরি করুন ।আমি স্বীকার করি যে আমি কীভাবে FamilyWild
কাজ করি তা খুব ভালভাবে বুঝতে পারি না xauth
বা এক্স ক্লায়েন্টরা Xauthority ফাইল থেকে কোথায় চলে তা নির্ভর করে এন্ট্রি ফিল্টার করে। এটি সম্পর্কে অতিরিক্ত তথ্য স্বাগত।
আপনি যদি আপনার ডকার অ্যাপটি বিতরণ করতে চান তবে আপনার ধারকটি চালানোর জন্য একটি প্রারম্ভিক স্ক্রিপ্টের প্রয়োজন হবে যা ব্যবহারকারীর এক্স সেশনের জন্য হেক্স কী পেয়েছে এবং এটি আগে বর্ণিত দুটি উপায়ের মধ্যে একটিতে ধারকটিতে আমদানি করে।
অনুমোদন প্রক্রিয়াটির যান্ত্রিকতাগুলি বুঝতে এটি সহায়তা করে:
$DISPLAY
।/tmp/.X11-unix
কনটেইনারটিতে মাউন্ট করা ডিরেক্টরিতে উপযুক্ত সকেটের মাধ্যমে X সার্ভারের কাছে অনুমোদনের অনুরোধের সাথে এটি পাস করে ।দ্রষ্টব্য: এক্স 11 ইউনিক্স সকেটটি এখনও পাত্রে মাউন্ট করা দরকার, অথবা ধারকটির এক্স সার্ভারে কোনও রুট থাকবে না। বেশিরভাগ বিতরণ সুরক্ষা কারণে ডিফল্টরূপে X সার্ভারে টিসিপি অ্যাক্সেস অক্ষম করে।
অতিরিক্ত তথ্যের জন্য এবং এক্স ক্লায়েন্ট / সার্ভার সম্পর্ক কীভাবে কাজ করে তা আরও ভালভাবে উপলব্ধি করতে, এসএসএইচ এক্স ফরোয়ার্ডিংয়ের উদাহরণটি দেখার পক্ষে এটি সহায়ক:
$DISPLAY
এসএসএইচ সেশনে এর নিজস্ব এক্স সার্ভারের দিকে নির্দেশ করার জন্য মানটি সেট করে ।xauth
রিমোট হোস্টের জন্য একটি নতুন কুকি তৈরি করতে ব্যবহার করে এবং এটি Xauthority
স্থানীয় এবং দূরবর্তী ব্যবহারকারীদের জন্য ফাইলগুলিতে যুক্ত করে addsএটি হালকা ওজনের নয় তবে এটি একটি দুর্দান্ত সমাধান যা সম্পূর্ণ ডেস্কটপ ভার্চুয়ালাইজেশন সহ ডকার বৈশিষ্ট্য সমতা দেয়। এক্সফেস 4 বা উবুন্টু এবং সেন্টোস কাজের জন্য আইসডাব্লুএম উভয়ই কাজ করে এবং noVNC
বিকল্পটি ব্রাউজারের মাধ্যমে সহজেই অ্যাক্সেসের ব্যবস্থা করে।
https://github.com/ConSol/docker-headless-vnc-container
এটি এর vncserver noVNC
পাশাপাশি চালিত হয় tigerVNC
। তারপরে এটি startx
প্রদত্ত উইন্ডো ম্যানেজারের জন্য কল করে । এছাড়াও, libnss_wrapper.so
ব্যবহারকারীর জন্য পাসওয়ার্ড পরিচালনা অনুকরণ করতে ব্যবহৃত হয়।
xpra
ডকারেও চেষ্টা করেছিলাম , যা রুট-কম এক্স xpra
the সর্বোত্তম উপযুক্ত আইএমও এবং ভিএনসির চেয়ে দক্ষ more
--device /dev/...
গিয়ে প্রয়োজনীয় --cap
সুযোগসুবিধা স্থাপন না করলেই । এটি ধারণার উদ্দেশ্যকে পরাস্ত করে, তবে আপনি ডিভাইসগুলির মধ্য দিয়ে যেতে পারেন। কিছু টুইট করার মাধ্যমে এটি সম্ভব হওয়া উচিত আমি ভিএনসির অধীনে জিনোম / কেডিএ চালানোর বিশ্বাস করি। আমি এনভিডিয়া কার্ডগুলির সাথে ডকারে একাধিক এক্স দৌড়েছি (কোনও ভিএনসি বা এক্সপ্রা নেই), তাই এটি অবশ্যই কার্যকর।
Http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/ এ দেওয়া সমাধানটি কনটেইনারগুলির ভিতরে থেকে জিইউআই অ্যাপ্লিকেশন শুরু করার একটি সহজ উপায় বলে মনে হচ্ছে না (আমি ফায়ারফক্সের জন্য চেষ্টা করেছি) ওবুন্টু ১৪.০৪ এর বেশি) তবে আমি দেখতে পেয়েছি যে লেখক পোস্ট করা সমাধানটিতে একটি অতিরিক্ত অতিরিক্ত পরিবর্তন প্রয়োজন।
বিশেষত, ধারক চালানোর জন্য, লেখক উল্লেখ করেছেন:
docker run -ti --rm \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
firefox
তবে আমি দেখতে পেয়েছি (একই সাইটে একটি নির্দিষ্ট মন্তব্যের ভিত্তিতে) দুটি অতিরিক্ত বিকল্প
-v $HOME/.Xauthority:$HOME/.Xauthority
এবং
-net=host
ফায়ারফক্সের সঠিকভাবে কাজ করার জন্য ধারকটি চালনার সময় নির্দিষ্ট করা দরকার:
docker run -ti --rm \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $HOME/.Xauthority:$HOME/.Xauthority \
-net=host \
firefox
আমি সেই পৃষ্ঠায় তথ্য এবং এই অতিরিক্ত অনুসন্ধানগুলি সহ একটি ডকার চিত্র তৈরি করেছি: https://hub.docker.com/r/amanral/ubuntu-firefox/
/tmp/.X11-unix
সকেটটি পাস করার জন্য মোটেও পছন্দ করেন না। এটি কেবল মাউন্টিং .Xauthority
এবং সাথে কাজ করে --net=host
।
/tmp/.X11-unix
ভলিউম হিসাবে ব্যবহার করা আর কাজ করে না, কারণ ডকার চুপচাপ স্টিকি ডিরেক্টরিগুলি থেকে ভলিউম মাউন্টগুলি অস্বীকার করে।
--network=host
করে তা বোঝাও গুরুত্বপূর্ণ । এটি হোস্টের নেটওয়ার্ক স্ট্যাকটিতে আপনার ধারককে সম্পূর্ণ অ্যাক্সেস দেয় যা আপনি যা করার চেষ্টা করছেন তার উপর নির্ভর করে অনাকাঙ্ক্ষিত হতে পারে। আপনি যদি কেবল আপনার ডেস্কটপে কনটেইনারযুক্ত জিইউআই চালানোর সাথে ঝাঁকুনি দিচ্ছেন তবে তা বিবেচনা করা উচিত নয়।
নেই অন্য lord.garbage দ্বারা সমাধান VNC- র, ssh ও X11 ফরওয়ার্ডিং ব্যবহার না করেই একটি কন্টেইনারে রান গুই অ্যাপ্লিকেশানে। এটি এখানেও উল্লেখ করা হয়েছে ।
আপনি যদি কোনও জিইআইআই অ্যাপ্লিকেশন শিরোনামহীন চালাতে চান তবে এখানে পড়ুন । আপনাকে যা করতে হবে তা হ'ল ভার্চুয়াল মনিটর xvfb
বা অন্যান্য অনুরূপ সফ্টওয়্যার তৈরি করা। আপনি ব্রাউজারগুলির সাথে উদাহরণস্বরূপ সেলেনিয়াম পরীক্ষা চালাতে চাইলে এটি খুব সহায়ক।
কোথাও উল্লেখ করা হয়নি এমন কিছু হ'ল কিছু সফ্টওয়্যার আসলে লিনাক্সের ধারকগুলির সাথে বালি-বক্সিং ব্যবহার করে। সুতরাং উদাহরণস্বরূপ, আপনি যদি ধারকটি চালনার সময় উপযুক্ত পতাকা ব্যবহার না করেন তবে Chrome কখনই স্বাভাবিকভাবে চলবে না --privileged
।
আমি পার্টিতে দেরি করেছি, তবে ম্যাক ব্যবহারকারীরা যারা এক্সকিয়ার্টজ পাথ যেতে চান না তাদের জন্য এখানে একটি কার্যকরী উদাহরণ যা ডেস্কটপ এনভায়রনমেন্ট (xfce) ব্যবহার করে Xvfb
এবং একটি ফেডোরা চিত্র তৈরি করে VNC
। এটি সহজ, এবং কাজ করে:
একটি ম্যাকের সাথে, আপনি কেবল এটির সাথে সংযোগ স্থাপন করে স্ক্রিন ভাগ করে নেওয়ার (ডিফল্ট) অ্যাপ্লিকেশন ব্যবহার করে এটি অ্যাক্সেস করতে পারেন localhost:5901
।
Dockerfile:
FROM fedora
USER root
# Set root password, so I know it for the future
RUN echo "root:password123" | chpasswd
# Install Java, Open SSL, etc.
RUN dnf update -y --setopt=deltarpm=false \
&& dnf install -y --setopt=deltarpm=false \
openssl.x86_64 \
java-1.8.0-openjdk.x86_64 \
xorg-x11-server-Xvfb \
x11vnc \
firefox \
@xfce-desktop-environment \
&& dnf clean all
# Create developer user (password: password123, uid: 11111)
RUN useradd -u 11111 -g users -d /home/developer -s /bin/bash -p $(echo password123 | openssl passwd -1 -stdin) developer
# Copy startup script over to the developer home
COPY start-vnc.sh /home/developer/start-vnc.sh
RUN chmod 700 /home/developer/start-vnc.sh
RUN chown developer.users /home/developer/start-vnc.sh
# Expose VNC, SSH
EXPOSE 5901 22
# Set up VNC Password and DisplayEnvVar to point to Display1Screen0
USER developer
ENV DISPLAY :1.0
RUN mkdir ~/.x11vnc
RUN x11vnc -storepasswd letmein ~/.x11vnc/passwd
WORKDIR /home/developer
CMD ["/home/developer/start-vnc.sh"]
start-vnc.sh
#!/bin/sh
Xvfb :1 -screen 0 1024x768x24 &
sleep 5
x11vnc -noxdamage -many -display :1 -rfbport 5901 -rfbauth ~/.x11vnc/passwd -bg
sleep 2
xfce4-session &
bash
# while true; do sleep 1000; done
আপনার প্রয়োজন / প্রয়োজন হলে বিল্ড অ্যান্ড রান কমান্ডগুলির জন্য লিঙ্কযুক্ত রিডমি চেক করুন ।
জর্জেন ওয়েগার্টের উত্তরের ভিত্তিতে আমার কিছুটা উন্নতি হয়েছে:
docker build -t xeyes - << __EOF__
FROM debian
RUN apt-get update
RUN apt-get install -qqy x11-apps
ENV DISPLAY :0
CMD xeyes
__EOF__
XSOCK=/tmp/.X11-unix
XAUTH_DIR=/tmp/.docker.xauth
XAUTH=$XAUTH_DIR/.xauth
mkdir -p $XAUTH_DIR && touch $XAUTH
xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -
docker run -ti -v $XSOCK:$XSOCK -v $XAUTH_DIR:$XAUTH_DIR -e XAUTHORITY=$XAUTH xeyes
পার্থক্যটি হ'ল এটি একটি ডিরেক্টরি তৈরি করে $ XAUTH_DIR যা place XAUTH ফাইল স্থাপন করতে ব্যবহৃত হয় এবং ock XAUTH_DIR ডিরেক্টরিটি ock XAUTH ফাইলের পরিবর্তে ডকার পাত্রে রাখে।
এই পদ্ধতির সুবিধাটি হ'ল আপনি /etc/rc.local এ একটি কমান্ড লিখতে পারেন যা / tmp এ $ XAUTH_DIR নামে একটি ফাঁকা ফোল্ডার তৈরি করতে হবে এবং এর মোডটি 777 এ পরিবর্তন করতে হবে।
tr '\n' '\000' < /etc/rc.local | sudo tee /etc/rc.local >/dev/null
sudo sed -i 's|\x00XAUTH_DIR=.*\x00\x00|\x00|' /etc/rc.local >/dev/null
tr '\000' '\n' < /etc/rc.local | sudo tee /etc/rc.local >/dev/null
sudo sed -i 's|^exit 0.*$|XAUTH_DIR=/tmp/.docker.xauth; rm -rf $XAUTH_DIR; install -m 777 -d $XAUTH_DIR\n\nexit 0|' /etc/rc.local
সিস্টেমটি পুনরায় চালু হওয়ার সাথে সাথে, ব্যবহারকারী লগইন করার আগে ডকারটি container XAUTH_DIR ডিরেক্টরিটি স্বয়ংক্রিয়ভাবে মাউন্ট করবে যদি কনটেইনারটির পুনঃসূচনা নীতিটি "সর্বদা" থাকে। ব্যবহারকারীর লগইন করার পরে, আপনি ~ /। প্রোফাইলে একটি কমান্ড লিখতে পারেন যা $ XAUTH ফাইল তৈরি করতে হয়, তারপরে ধারকটি স্বয়ংক্রিয়ভাবে এই $ XAUTH ফাইলটি ব্যবহার করবে।
tr '\n' '\000' < ~/.profile | sudo tee ~/.profile >/dev/null
sed -i 's|\x00XAUTH_DIR=.*-\x00|\x00|' ~/.profile
tr '\000' '\n' < ~/.profile | sudo tee ~/.profile >/dev/null
echo "XAUTH_DIR=/tmp/.docker.xauth; XAUTH=\$XAUTH_DIR/.xauth; touch \$XAUTH; xauth nlist \$DISPLAY | sed -e 's/^..../ffff/' | xauth -f \$XAUTH nmerge -" >> ~/.profile
সামগ্রিকভাবে, প্রতিবার সিস্টেমটি পুনরায় চালু হওয়ার সাথে সাথে ব্যবহারকারী লগইন করে কনটেইনারটি স্বয়ংক্রিয়ভাবে Xauthority ফাইলটি পাবেন।
অন্যান্য সমাধানগুলি কাজ করা উচিত, তবে এখানে একটি সমাধান রয়েছে docker-compose
।
এই ত্রুটিটি ঠিক করতে, আপনাকে ডকারে to DISPLAY এবং .X11-unix পাস করতে হবে, পাশাপাশি xhost এ ডকার অ্যাক্সেস শুরু করা ব্যবহারকারীকে মঞ্জুরি দিতে হবে।
docker-compose.yml
ফাইলের মধ্যে :
version: '2'
services:
node:
build: .
container_name: node
environment:
- DISPLAY
volumes:
- /tmp/.X11-unix:/tmp/.X11-unix
টার্মিনাল বা স্ক্রিপ্টে:
xhost +si:localuser:$USER
xhost +local:docker
export DISPLAY=$DISPLAY
docker-compose up
এনভিডিয়া ড্রাইভারের সাথে ওপেনজিএল রেন্ডারিংয়ের জন্য, নিম্নলিখিত চিত্রটি ব্যবহার করুন:
https://github.com/thewtex/docker-opengl-nvidia
অন্যান্য ওপেনজিএল বাস্তবায়নের জন্য, নিশ্চিত করুন যে চিত্রটির হোস্টের মতোই বাস্তবায়ন রয়েছে।
অনুরূপ @Nick আমার জন্য এর উত্তর, কিন্তু তার সমাধান কাজ করে নি।
প্রথমে কাজ করে সোকাট ইনস্টল করুন এবং এক্সকোয়ার্টজ brew install socat
ইনস্টল করুন ( https://www.xquartz.org/ )
তারপরে মন্তব্যগুলি বিভাগে এই পদক্ষেপগুলি অনুসরণ করুন ( http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/ ):
1. in one mac terminal i started:
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
2. and in another mac terminal I ran:
docker run -ti --rm \
-e DISPLAY=$(ipconfig getifaddr en0):0 \
-v /tmp/.X11-unix:/tmp/.X11-unix \
firefox
আমি আমার ডিবিয়ান ডকার কনটেইনার থেকেও ক্লিওন চালু করতে সক্ষম হয়েছি।
ব্রিজ নেটওয়ার্ক সহ ডকার ডিসপ্লে ম্যানেজার লাইটডিএম সহ উবুন্টু 16.04 এর জন্য:
cd /etc/lightdm/lightdm.conf.d
sudo nano user.conf
[Seat:*]
xserver-allow-tcp=true
xserver-command=X -listen tcp
আপনি আরও ব্যক্তিগত অনুমতি ব্যবহার করতে পারেন
xhost +
docker run --volume="$HOME/.Xauthority:/root/.Xauthority:rw" --env="DISPLAY=$HOST_IP_IN_BRIDGE_NETWORK:0" --net=bridge $container_name
আপনি ইতিমধ্যে ছবিটি তৈরির ক্ষেত্রে আরও একটি উত্তর:
ডকার ডাব্লু / ও সুডো ( ডকার ঠিক করতে কিভাবে: অনুমতি পাওয়ার বিষয়টি অস্বীকার করা হয়েছে )
হোস্ট এবং ধারক ভাগের মধ্যে একই ব্যবহারকারী এবং বাড়ি এবং পাসডব্লু শেয়ার করুন (টিপস: ব্যবহারকারীর নামের পরিবর্তে ব্যবহারকারীর আইডি ব্যবহার করুন)
ড্রাইভার নির্ভর libs ভাল কাজ করার জন্য ডেভ ফোল্ডার
প্লাস এক্স 11 এগিয়ে।
docker run --name=CONTAINER_NAME --network=host --privileged \
-v /dev:/dev \
-v `echo ~`:/home/${USER} \
-p 8080:80 \
--user=`id -u ${USER}` \
--env="DISPLAY" \
--volume="/etc/group:/etc/group:ro" \
--volume="/etc/passwd:/etc/passwd:ro" \
--volume="/etc/shadow:/etc/shadow:ro" \
--volume="/etc/sudoers.d:/etc/sudoers.d:ro" \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
-it REPO:TAG /bin/bash
আপনি জিজ্ঞাসা করতে পারেন, এত কিছু যদি একই রকম হয় তবে ডকার ব্যবহার করার কী দরকার? ভাল, আমি যে কারণটি ভাবতে পারি তা হ'ল প্যাকেজ হ্রাসকারী জাহান্নামকে কাটিয়ে উঠা ( https://en.wikedia.org/wiki/D dependency_hell )।
সুতরাং এই ধরণের ব্যবহার বিকাশকারীদের পক্ষে আমার পক্ষে বেশি উপযুক্ত।
echo ~
: / হোম / $} id -u ${USER}
ইউজার } - ব্যবহারকারী = --env = "DISPLAY" --volume = "/ ইত্যাদি / পাসডাব্লুড: / ইত্যাদি / পাসডব্লিউড: রো "
আমি একজন ইউএসবি ক্যামেরা ব্যবহার থেকে একটি ভিডিও স্ট্রিম চালানোর জন্য পরিচালিত opencv
মধ্যে docker
এই পদক্ষেপগুলি অনুসরণ করে:
ডকারকে এক্স সার্ভারটি অ্যাক্সেস করতে দিন
xhost +local:docker
এক্স 11 ইউনিক্স সকেট এবং এক্স প্রমাণীকরণ ফাইল তৈরি করুন
XSOCK=/tmp/.X11-unix
XAUTH=/tmp/.docker.xauth
যথাযথ অনুমতি যুক্ত করুন
xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -
Qt রেন্ডারিং গতি "নেটিভ" তে সেট করুন, সুতরাং এটি এক্স 11 রেন্ডারিং ইঞ্জিনটিকে বাইপাস করবে না
export QT_GRAPHICSSYSTEM=native
কিউটি কে এমআইটি-এসএইচএম (ভাগ করা মেমরি) ব্যবহার না করতে বলুন - সেভাবে এটি সুরক্ষা-ভিত্তিকও হওয়া উচিত
export QT_X11_NO_MITSHM=1
ডকার রান কমান্ড আপডেট করুন
docker run -it \
-e DISPLAY=$DISPLAY \
-e XAUTHORITY=$XAUTH \
-v $XSOCK:$XSOCK \
-v $XAUTH:$XAUTH \
--runtime=nvidia \
--device=/dev/video0:/dev/video0 \
nvcr.io/nvidia/pytorch:19.10-py3
দ্রষ্টব্য: আপনি যখন প্রকল্পটি শেষ করেন, অ্যাক্সেস নিয়ন্ত্রণগুলি তাদের ডিফল্ট মানটিতে ফিরিয়ে দিন - xhost -local:docker
আরও বিশদ: ডকের সাথে জিইউআই ব্যবহার করা
ক্রেডিট: টেনসরফ্লো, ওপেনসিভি এবং ডকার ব্যবহার করে রিয়েল-টাইম এবং ভিডিও প্রসেসিং অবজেক্ট সনাক্তকরণ