Как получить сокетное соединение X11 между док-контейнером и рабочим столом - PullRequest
0 голосов
/ 21 апреля 2019

Я хочу запустить сообщество Pycharm в Docker на моем рабочем столе. Я создал Dockerfile (ниже) и увидел, что он отлично работает на Mac.

FROM debian:buster-slim
ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y \
    ca-certificates \
    curl \
    apt-utils \
    dirmngr \
    gnupg \
    libasound2 \
    libdbus-glib-1-2 \
    libgtk-3-0 \
    libxrender1 \
    libx11-xcb-dev \
    libx11-xcb1 \
    libxt6 \
    xz-utils \
    --no-install-recommends \
    && rm -rf /var/lib/apt/lists/*

ENV HOME /home/user
RUN useradd --create-home --home-dir $HOME user \
    && chown -R user:user $HOME

ENV LANG C.UTF-8

RUN apt-get update && \
    apt-get install -y python-pip \
      vim \
      wget \
      x11-utils \
      xfonts-base \
      xpra


# install PyCharm
RUN cd / && \
    wget -q http://download.jetbrains.com/python/pycharm-community-2019.1.1.tar.gz && \
    tar xvfz pycharm-community-2019.1.1.tar.gz && \ 
    rm pycharm-community-2019.1.1.tar.gz 

USER user

CMD [ "/pycharm-community-2019.1.1/bin/pycharm.sh"]

Однако, когда я пытаюсь запустить это в Ubuntu, я получаю ошибки X11 из кода Pycharm:

Start Failed: Не удалось инициализировать графическое окружение

java.awt.AWTError: Невозможно подключиться к серверу окон X11, используя «: 1» в качестве значение переменной DISPLAY. в java.desktop / sun.awt.X11GraphicsEnvironment.initDisplay (собственный метод)

Команда для вызова контейнера:

docker run -it --rm    -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=${DISPLAY} <<image_id>>

Я испробовал множество вариантов var DISPLAY (например, unix $ DISPLAY ), но ни один из них не сработал.

Обновление:

Я побежал:

docker run -it --rm    -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=${DISPLAY} --entrypoint /bin/sh <<image_id>>

чтобы получить доступ в контейнер, а затем запустил:

$ ls -l /tmp
total 0

Я в замешательстве - я думал, что сокет X11, находящийся на моем хост-компьютере, был бы привязан к тому же месту в контейнере. Это красная сельдь?

...