Я создал самый простой (минимальный рабочий пример) Dockerfile
для запуска графического приложения на моей хост-системе Ubuntu 16.04 LTS с внутренним контейнером 19.04:
mkdir ~/docker-xclock
cat > ~/docker-xclock/Dockerfile << EOF
FROM ubuntu:19.04
RUN apt-get update
RUN apt-get install -y x11-apps
CMD xclock
EOF
Затем создал контейнер с
docker build -t ubuntu:xclock ~/docker-xclock
Когда я пытаюсь запустить этот контейнер, отображается сообщение об ошибке:
$ docker run ubuntu:xclock Error: Can't open display:
Что не так?
Мы должны сообщить контейнеру о выполнении сервера X11 на хосте со специальным синтаксисом [1]:
docker run -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix ubuntu:xclock --user="$(id --user):$(id --group)"
где [2]:
- e, - ENV = []
Переменные среды набора
- u, - пользователь = ""
Устанавливает имя пользователя или используемый UID и дополнительно groupname или GID для указанной команды.
- v | - объем [= [[DIR хоста:] контейнерный DIR [: ОПЦИИ]]]
Создайте связывание, монтируются. Если Вы указываете,-v/HOST-DIR:/CONTAINER-DIR, Докер связывают, монтируется/HOST-DIR в хосте/CONTAINER-DIR в контейнере Докера. Если 'DIR хоста' опущен, Докер автоматически создает новый объем на хосте. ОПЦИИ являются запятой, разграничил список и может быть:
Ссылка:
Создайте Dockerfile
в папке docker-xclock
.
mkdir ~/docker-xclock
cat > ~/docker-xclock/Dockerfile << EOF
FROM ubuntu:19.04
ENV https_proxy="xxx"
ENV http_proxy="xxx"
ENV no_proxy="xxx"
RUN apt-get update
RUN apt-get install -y x11-apps
CMD xclock
EOF
docker build -t ubuntu:xclock ~/docker-xclock
docker run -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --user="$(id --user):$(id --group)" ubuntu:xclock
Примечание: ubuntu:xclock
поставить в конце команды. Использование X11 для взаимодействия с графическим интерфейсом.
если вы все еще получаете сообщение об ошибке, например:
No protocol specified
Error: Can't open display: :0
убедитесь, что вы запускаете
$ xhost local:docker
*-из https://github.com/jessfraz/dockerfiles/ вопросы/6#issuecomment-266230114