sandbox_wire
宣言した名前の行き先をボックス内の自分のプロセスと externalBaseUrl の間で切り替えます。動作中のボックスに新しい名前を宣言したり、名前を別のボックスや公開したバージョンに向けたりもします。
| 入力 | 出力 |
|---|---|
id、service、および mode(box または external)、または port と任意の targetPort、または port と fromBox と任意の fromPort(リンク)、または port と version と任意の containerPort、env(公開したバージョン)、またはサービスの代わりに scenePaths |
wiring(externalBaseUrl、entry、services[{name, port, targetPort, address, mode, web}])、dns。リンクなら links[{name, port, fromBox, fromPort, fromStatus, active, opened, failed}]、バージョンなら service(run 付き)と next |
必要なのは、ボックスに externalBaseUrl(sandbox_start で渡したもの、または環境から引き継いだもの)がある場合と、起動中のボックスに名前を追加する場合だけです。
mode: "box":name:portが、ボックス内でサービスのtargetPortで動く自分のプロセスに届きます。mode: "external":name:portが再びexternalBaseUrlに転送されます。ボックスにexternalBaseUrlがない場合は失敗します。そのとき宣言したサービスはすべてすでにボックス内の自分のプロセスに届いていて、配線するものはありません。名前を自分の dev に向けたいなら、environment(そのexternalBaseUrlが付いてきます)かexternalBaseUrlを付けてボックスを起動します。- 同じ
targetPortを共有する名前は 1 つのプロセスで、一緒に切り替わります。 - 切り替えで変わるのは転送ルールだけです。boxd はそのためにポートを占有しないので、自分のプロセスはすでに動いていてかまいません。開いている接続はそのまま残り、新しい接続が新しいモードに従います。
portと任意のtargetPort:起動中のボックスでserviceを新しいホスト名として宣言します。専用のアドレスを持ち、以降は起動時に渡した名前と同じように解決され、name:portはtargetPort(省略時はport。portが 80 か 9095 なら必須)に届きます。modeは無視されます。新しい名前は同じtargetPortにある既存の名前のモードに従い、それがなければexternalBaseUrlのあるボックスではexternal、ないボックスではboxで始まります。名前はボックスに記録され、sandbox_status.servicesに出て、boxd が再起動しても残ります。webを付けなければ URL はありません。web: trueを付けると、新しいイメージのボックスでは最初以外のサービスにも開ける URL ができます。古いボックスで 2 番目の web サービスを追加すると 409 となり、新しいボックスを起動する方法が示されます。アドレス範囲はこの方法では追加できません。いまリンクや環境のアドレスである名前は、take-over機能のあるボックスではその場で引き取られます(リンクや環境のアドレスを引き取る)。古いボックスでは、環境のアドレスはコネクタ経由のままで、リンクの名前は 409 になります。既存の名前に別のportやtargetPortを渡すと移動します。portなしのtargetPortは 400 になります。portなしのweb: true:宣言済みのサービスをwebにし、webUrlとアプリの「使う」ボタンがそれを開くようにします。sandbox_reviewのカードが何を開くかはこの指定では決まらず、その呼び出しのopen(webならportも)で指定します。modeは省略できます。省略すると現在の転送モードを保ち、指定するとモードも切り替わります。新しいボックスではすべての web サービスの URL が開けます。最初のサービスはsceneUrl、ほかのサービスはそれぞれの URL を使います。古いボックスで 2 番目のサービスを web にすると 409 となり、新しいボックスの起動を案内します。portとfromBox、任意のfromPort:自分の別のボックスへのリンクを宣言するか、既存のリンク(同じserviceとport)の向き先を変えます。このときの戻り値は{ "links": [...] }、つまりそのボックスのすべてのリンクです。別のボックスへのリンクを参照してください。portとversion、任意のcontainerPortとenv:動いているボックスにその名前を宣言し、公開したバージョンをその名前で起動します。前に動いていたバージョンは置き換わります。戻り値は{ "service": {...}, "next": "..." }、つまりそのサービスとrunです。公開したバージョンを動かすを参照してください。scenePaths(serviceの代わり):ボックスがexternalBaseUrlに転送する、sceneUrl上のパスの接頭辞。たとえば["/api"]で、パスはそのまま残ります。sceneUrlから読み込んだページが環境の API を同一オリジンで呼べるので、環境側にボックスの URL 用の CORS 設定は要りません(そこで*.box.parallelsandbox.comを許可すると、すべてのアカウントのボックスが入れてしまいます)。呼ぶたびに一覧ごと置き換わり、[]で消えます。パスは/で始め、/_sbxはボックス自身のもので、ボックスにexternalBaseUrlが必要です。結果はパスを含む配線表です。targetPortが出る前に起動したボックスは古い boxd で動いていて、これに対応していません。そのボックスではportと異なるtargetPortは 409 になり、メッセージにそう書かれます。新しいボックスを起動するか、プロセスが待ち受けるポートで、targetPortなし、80 と 9095 以外でサービスを宣言してください。- 戻り値は配線表全体で、
sandbox_status.wiringにも同じものがあります:externalBaseUrl、entry(sceneUrlが開く最初のサービス)、各サービスのport、targetPort、address(ボックス内での名前のアドレス。アドレス範囲にはない)、mode、web。加えてdns=ボックス自身が応答する各名前とそのアドレス(宣言したサービスと、環境のホスト名)です。 - 同じ
docker composeプロジェクト内のサービスは、compose ネットワークでも互いに到達できます。
すべてのツールとトピックはツールリファレンスに並んでいます。