質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1704閲覧

dockerで作った環境からlocalhostにアクセスできません

AI_engineer

総合スコア15

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/08/03 06:59

前提・実現したいこと

書籍「Pythonで学ぶ強化学習」のサンプルコードの実行環境をこちらを参考にしながらdockerで構築しました。
書籍によるとサンプルコードのrun_server.pyを実行すると、localhost:8888にアクセスすることできるらしいのですが、接続が拒否されてしまいます。

Dockerfile

# ①CPUの場合 FROM tensorflow/tensorflow:1.12.0-py3 COPY baby-steps-of-rl-ja/requirements.txt /root/ # ②パッケージインストール RUN add-apt-repository -y ppa:jonathonf/vim \ && apt-get update \ && apt-get install -y git vim xterm sudo python3-tk \ && pip install --upgrade pip \ && pip install -r /root/requirements.txt # ③ユーザーの切り替え RUN groupadd -g 1000 developer && \ useradd -u 1000 -g 1000 --groups sudo --create-home --shell /bin/bash developer && \ echo 'developer:P@ssw0rd' | chpasswd USER developer WORKDIR /home/developer

ターミナルでのコマンド

docker run --name baby-steps-container -it -e DISPLAY=host.docker.internal:0.0 -v ~/Desktop/baby-steps-of-rl-ja:/home/developer/baby-steps-of-rl-ja -v /tmp/.X11-unix/:/tmp/.X11-unix baby-steps-env bash

その後、コンテナ内でrun_server.pyを実行

developer@bef3c54ed2aa:~/baby-steps-of-rl-ja/DP$ python run_server.py Run server on port: 8888

run_server.py

import os import tornado.ioloop from tornado.options import define, options, parse_command_line from application import Application define("port", default=8888, help="run on the given port", type=int) def main(): parse_command_line() app = Application() port = int(os.environ.get("PORT", 8888)) app.listen(port) print("Run server on port: {}".format(port)) tornado.ioloop.IOLoop.current().start() if __name__ == "__main__": main()

この状態でlocalhost:8888にアクセスしましたが、localhostでの接続が拒否されます。

今まで、dockerを用いて、localhostにアクセスした経験等がないため、初歩的な質問で頓珍漢なことをしているかもしれません。
どなたか解決策がわかる方いましたらご教授願います。

補足情報(FW/ツールのバージョンなど)

mac OS Catalina ver.10.15.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

コンテナ内のポートに対してコンテナ外からアクセスするためには、-pオプションをつけてコンテナ外にポートを公開する必要があります。
今回の場合localhost:8888でアクセスしたいとのことですので、docker runのオプションに -p 8888:8888 をつけてください。

投稿2021/08/03 10:57

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

localhostへの接続は、ホスト側からやっていますよね?

dockerの起動時にネットワークを指定していないので、dockerコンテナはbridgeに接続しているはずなので、それでは接続できません。
起動時のオプションに「--net=host」を追加すればいけるのではないかと。

ですが、そもそもの話として、参照先の記事を見ると、X Windowシステムのソケットを共有する形でGUIを動かそうとしているようなので、そもせもそういう使いかたを想定していないようですね。

投稿2021/08/03 10:54

TakaiY

総合スコア12765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問