web-dev-qa-db-ja.com

Dockerコンテナーを実行して、そのグラフィカルアプリケーションウィンドウをホストに表示することは可能ですか?

19.04内部コンテナーを備えたUbuntu 16.04 LTSホストシステムでグラフィカルアプリケーションを実行するための最も単純な(最小限の作業例)Dockerfileを作成しました。

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: 

なにが問題ですか?

1
N0rbert

特別な構文でホスト上でX11サーバーを実行することをコンテナに通知する必要があります[1]:

docker run -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix ubuntu:xclock --user="$(id --user):$(id --group)"

xclock on docker

ここで、[2]:

-e、-env = []
環境変数を設定します
-u、--user = ""
指定したコマンドに使用するユーザー名またはUIDを設定し、オプションでグループ名またはGIDを設定します。
-v | --volume [= [[Host-DIR:] CONTAINER-DIR [:OPTIONS]]]
バインドマウントを作成します。 -v/Host-DIR:/ CONTAINER-DIRを指定すると、Dockerバインドはホストの/ Host-DIRをDockerコンテナーの/ CONTAINER-DIRにマウントします。 「Host-DIR」を省略した場合、Dockerはホスト上に新しいボリュームを自動的に作成します。 OPTIONSはコンマで区切られたリストであり、次のいずれかになります。


参照:

  1. https://forums.docker.com/t/x11-forwarding-with-v-on-docker-run-not-working/17708/4
  2. man docker-run
1
N0rbert

Dockerfileを作成する
mkdir〜/ docker-xclock
ENV HTTPS_PROXY = ""
ENV HTTP_PROXY = ""
ENV NO_PROXY = ""
cat>〜/ docker-xclock/Dockerfile << EOF
Ubuntuから:19.04
apt-get updateを実行します
apt-get install -y x11-appsを実行します
CMD xclock
EOF

1)docker build -t ubuntu:xclock〜/ docker-xclock
2)docker run -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --user = "$(id --user):$(id --group)" ubuntu:xclock
NB:ubuntu:xclockをコマンドの最後に配置

0

docker-xclockフォルダーにDockerfileを作成します。

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を付けてください。 GUIインタラクションにX11を使用する。

0