Пересылка X11 не работает, когда образ запускается на докере, но работает нормально, если образ запускается без докера - PullRequest
0 голосов
/ 18 октября 2018

У меня есть докер-контейнер, основанный на debian, и он работает, когда я запускаю его, как,

“docker run -ti --name devworkstation --rm --net=host -v /var/run/docker.sock:/var/run/docker.sock -e DISPLAY=$env:DISPLAY xxxx/xxxx:devworkstation”

Под работами я имею в виду, что появляется командная строка bash, и когда я запускаю xeyes, я вижуокно на моем компьютере Windows 10, как я ожидаю.(Переадресация x11 работает.)

($ env: DISPLAY = «myWinIP: 0.0»)

Затем я создал новый внешний виртуальный коммутатор с именем «dockerExternalSwitch» и док-машину с«Docker-machine create -d hyperv --hyperv-virtual-switch dockerExternalSwitch dev1»

Я настроил свою среду в соответствии с docker-machine env dev1.Затем я запускаю ту же команду запуска докера, что и выше, на компьютере докера.Он вызывает мою командную строку, как я ожидал, но когда я запускаю xeyes, я получаю сообщение об ошибке:

Ошибка: невозможно открыть дисплей: xxx.xxx.xxx.xxx:0.0

У меня также установлен Firefox на образ Debian.Появляется аналогичная ошибка: Невозможно инициализировать сервер: Тип отображения Broadway не поддерживается: xxx.xx.xx.xxx:0.0 Ошибка: невозможно открыть дисплей: xxx.xxx.xxx.xxx:0.0

Поскольку он работаеткогда я запускаю его напрямую (без док-машины) и происходит сбой при использовании док-машины, мне интересно, связано ли это с сетью.

Содержимое Dockerfile:

from debian:9.5
RUN apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y firefox-esr
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y vim git curl
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y gdb valgrind
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y qt4-default
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y dos2unix tcpdump netcat
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y apt-utils
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y linux-image-rt-amd64
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y task-mate-desktop
RUN env
CMD /bin/bash

Iпробовал все предложения по пересылке x11, которые я мог найти в интернете.И я искал переполнение стека для предложений.Я не нашел решения, и оно, похоже, связано с докером.Будем очень благодарны за любые предложения о том, что я мог бы попробовать.

(К вашему сведению, я работаю с докером, потому что у меня есть пример кода, который подключается к сетевой камере, которая работает как докер.машина, но не когда я работаю без докера.)

1 Ответ

0 голосов
/ 18 октября 2018

Я понял это.При запуске образа без докера, переменная DISPLAY должна была быть IP-адресом моего компьютера с Windows.При запуске образа на док-машине мне пришлось изменить переменную окружения DISPLAY на IP-адрес нового виртуального коммутатора, который я создал.В моем файле сценария я использовал следующий код:

#$local is true when running w/o the docker machine
if ($local) {
     $IPv4=get-netipaddress -InterfaceAlias "vEthernet (Default Switch)" -AddressFamily "IPv4" | select -expand IPAddress
 }
 else {
     $IPv4=get-netipaddress -InterfaceAlias "vEthernet (dockerExternalSwitch)" -AddressFamily "IPv4" | select -expand          IPAddress
 }
debug-output "IPv4: $($IPv4)"
 $env:DISPLAY=$IPv4 + ":0.0"

if (! $local) {
  #set up to use docker-machine using docker-machine env dev1
}

docker run -ti --name devworkstation --rm --net=host -v /var/run/docker.sock:/var/run/docker.sock -e DISPLAY=$env:DISPLAY    xxx/xxx:devworkstation

Теперь пересылка x11 работает с док-машиной и без нее.

...