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 ネットワークでも互いに到達できます。

すべてのツールとトピックはツールリファレンスに並んでいます。