私の使用例:
ヘッドレス モードで watir-webdriver スクリプトを実行する必要があり、開発マシンは Windows を実行しています。
私たちの問題の要点:
コンテナー内で Python サーバーを立ち上げることができますが、ホストから期待される場所に接続できません。http://192.168.59.103:8084.
アーキテクチャ:
「何か役に立つことをして出力をコンソールに表示する」Ruby スクリプトと、os をインポートしてから index ルート内で os.system('ruby ourrubyscript.rb') を実行する基本的な python サーバー。また、潜在的なクロスオリジンの問題を排除するために、api ルーティング用のフラスコとフラスコ.cors を導入しました。
ローカル テスト (ホスト上) :
ホスト ワークスペースで「python server.py」を実行すると、ポート 5000 で Python サーバーが立ち上がります。ブラウザからのルーティングにより、ルートが実行され、予想される出力がコンソールに出力されます。
サーバー.py
from flask import Flask
from flask import request
from flask.ext.cors import CORS
import os
app = Flask(__name__)
CORS(app, resources={r'/': {"origins": "*"}}, headers='Content-Type')
app.config['CORS_HEADERS'] = 'Content-Type'
@app.route('/')
def index():
return "<h1>Hello Stupid</h1>"
@app.route('/ruby/test', methods=['GET'])
def runRubyScript():
return os.system("ruby script.rb")
if __name__ == "__main__":
app.run()
localhost:5000 に移動すると、「Hello Stupid」が画面に表示されます。
localhost:5000/ruby/test にルーティングすると、スクリプトが実行され、そのスクリプトがコンソールに出力されます。
これをdockerに移す手順
最新の centos を取得し、wget、xvfb、git、ruby、python、pip、flask、flask-cors、および firefox をインストールしました。「webdev」という名前のローカル イメージにコミットしました。次に、gem をヘッドレスでインストールし、phantomjs を $PATH にインストールしました。次に、src リポジトリをコンテナーの "/opt/testapp" にクローンしました。このリポジトリには、「server.py」ファイルと「script.rb」ファイルが含まれています。
docker@boot2docker:~$ docker run -d -p 5000:5000 --name wd webdev python /opt/testapp/server.py
そのため、 boot2docker-vm を private ip192.168.59.103
にバインドしたままにしました。別のコンテナーを実行している別のポートに移動することで、この ip が有効であることを確認できます。ただし、5000 に移動すると、ERR_CONNECTION_REFUSED が発生します。私はほとんど「AHA!!」を持っていました。iptables のポートはデフォルトでロックダウンされていると考えた瞬間、VM にマップするために内部ポート 5000 を開く必要がありましたが、centos イメージに iptables (またはこれは CentOS7 であるため、firewalld) がインストールされていないことがわかりました。デフォルトで。そのアプローチが間違っていることが判明したとき、私はアイデアが不足しているため、誰かがここで支援できるかどうかを確認するために投稿することにしました.