Machine: 【解決】docker-machineは既存のdockerホストをどのように追加できますか?

作成日 2016年03月21日  ·  63コメント  ·  ソース: docker/machine

それは古い問題ですが、私は有用な答えを見つけることができません。

私は次の環境を持っています:
ローカルホスト(私のラップトップ)名前:Chris-Laptop
docker-machineはすでにインストールされています、バージョン0.6.0、ビルドe27fb87、Mac OS X 10.11
リモートホスト(My VPS)名:li845-130(139.162.3.130)
docker-engineはすでにインストールされています、CentOS 7.0

1.リモートホストのDockerデーモンプロセス
[ root @ li845-130〜 ] -ef | grep docker |
ルート120931 0 02:09? 00:00:00 / usr / bin / dockerデーモン//0.0.0.0 :2376

2.パスワードなしでssh接続を構成します
[ tdy218 @ Chris-Laptop .ssh] $ ssh [email protected]
最後に失敗したログイン:Mon Mar 21 02:54:06 UTC 2016 from 125.88.177.95 on ssh:notty
最後に成功したログイン以降、54回のログイン試行の失敗がありました。
最終ログイン:2016年3月21日月曜日02:25:25から114.248.235.223
[ root @ li845-130〜 ]#

3.リモートDockerホストをローカルDockerマシンに追加します
[ tdy218 @ Chris-Laptop .ssh] $ docker-machine create --driver none -url = tcp://139.162.3.130 :2376 linodevps
作成前チェックの実行...
マシンを作成しています...
Dockerクライアントをこの仮想マシンで実行されているDockerエンジンに接続する方法を確認するには、次のコマンドを実行します。docker-machineenv linodevps
[ tdy218 @ Chris-Laptop .ssh] $ docker-machine ls
名前アクティブなドライバーの状態URLスウォームドッカーエラー
デフォルト* virtualbox実行中tcp://192.168.99.100 :2376 v1.10.3
linodevps-なし実行中tcp://139.162.3.130 :2376不明
[ tdy218 @ Chris-Laptop .ssh] $
[ tdy218 @ Chris-Laptop .ssh] $ docker-machine -D regenerate-certs linodevps
Dockerマシンバージョン:0.6.0、ビルドe27fb87
TLSマシン証明書を再生成しますか? 警告:これは元に戻せません。 (y / n):y
TLS証明書の再生成
/ usr / local / bin / docker-machineでバイナリパスが見つかりました
ドライバー用プラグインサーバーの起動なし
アドレス127.0.0.1:54648でリッスンしているプラ​​グインサーバー
().GetVersionを呼び出す
APIバージョン1の使用
().SetConfigRawを呼び出す
().GetMachineNameを呼び出す
command = configureAuth machine = linodevps
SSHが利用可能になるのを待っています...
WaitForSSH関数を取得しています...
(linodevps).GetSSHHostnameの呼び出し
(linodevps).GetSSHPortの呼び出し
(linodevps).GetSSHKeyPathの呼び出し
(linodevps).GetSSHUsernameの呼び出し
SSHクライアントタイプの使用:外部
{[-o BatchMode = yes -o PasswordAuthentication = no -o StrictHostKeyChecking = no -o UserKnownHostsFile = / dev / null -o LogLevel = quiet -o ConnectionAttempts = 3 -o ConnectTimeout = 10 -o ControlMaster = no -o ControlPath = none @ -p 0] / usr / bin / ssh}
SSHコマンドを実行しようとしています:
出口0
SSH cmd err、出力:終了ステータス255:使用法:ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b
.................。

sshコマンドの取得中にエラーが発生しました 'exit 0':SSHコマンドの実行中に問題が発生しました!
コマンド:exit 0
エラー:終了ステータス255
出力:使用法:ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
.....................。

最後に「SSHが利用可能になるのを待っている再試行が多すぎます。最後のエラー:再試行の最大数(60)を超えました...」と報告されます。

どうして ? パスワードなしでローカルホストとリモートDockerホスト間のssh接続を構成しました。

Dockerホストをローカルのdocker-machineコマンドラインにエクスポートするにはどうすればよいですか?

最も参考になるコメント

@dweomer別のコンピューターから既存の

全てのコメント63件

docker-machineサポートは既存のdockerホストを追加しますか?

過去5時間ドキュメントを検索していたので、実際には「--driver = none」オプションがあります(文書化されていません)。 https://github.com/docker/machine/issues/2270を参照して

@ tdy218 @atemerev覚えているように、 --driver noneオプションはテスト目的でのみ使用されるため、意図的に埋め込まれています(そして、リリースされた実行可能ファイルから削除されたと思いました)。

関連する問題:docker-machineで作成されたデジタルオーシャンに液滴があります。 別のラップトップからインスタンスを管理するにはどうすればよいですか?

同僚がdocker-machine regenerate-certs [name]を使用してラップトップから証明書を再作成しました。 そして今、私は自分のインスタンスにアクセスできなくなりました。 新しい証明書を手動でどこかにコピーする必要がありますか? これに関するドキュメントは本当に紛らわしいです。

$ docker-machine ls
NAME           ACTIVE   DRIVER         STATE     URL                        SWARM   DOCKER    ERRORS
default        -        virtualbox     Stopped                                      Unknown   
gapp-sandbox   *        digitalocean   Running   tcp://xx.xxx.xxx.xx:2376           Unknown   Unable to query docker version: Get https://xx.xxx.xxx.xx:2376/v1.15/version: x509: certificate signed by unknown authority

回避策を見つけました: https

マシンのconfig.jsonを編集して、グローバルマシンではなく、その特定のマシンのCAキーとクライアントキーを指すようにします。

そこで、同僚のフォルダからすべてのファイルをコピーし、すべてのパスを自分のマシンのパスに置き換えました。 私の場合、最終的なパスは/Users/mturatti/.docker/machine/machines/gapp-sandbox/です。
厄介な解決策ですが、うまくいくようです。

ca.pem
cert.pem
config.json
id_rsa
id_rsa.pub
key.pem
server-key.pem
server.pem

@dweomer別のコンピューターから既存の

@dweomer別のコンピューターから既存の

@atemerev :いいえ、そうではないと思います。 私が理解しているように、Docker Machineは、Docker対応のホストを作成/プロビジョニングするために存在します。

そうは言っても、 @ tdy218が使用すべきだと思う、やや自明ではないgenericドライバーが存在します。 genericドライバーがホストを引き継ぎ、再プロビジョニングします。 必要なのは、sshデーモンを備えた実行中のホストと、パスワードなしのsudoアクセス(または単にroot)を備えたそのホスト上のユーザーだけです。 この再プロビジョニングは、既存のDockerインストールが最大でアップグレードされるという点で非破壊的です。

@dweomer
次のテストでは、汎用ドライバーを使用して既存のDockerホストを追加してみました。
ローカルホスト(私のラップトップ)名前:Chris-Laptop
docker-machineはすでにインストールされています、バージョン0.6.0、ビルドe27fb87、Mac OS X 10.11
リモートホスト(My VPS)名:li845-130(139.162.3.130)
docker-engineはすでにインストールされています、CentOS 7.0

1.リモートホストのDockerデーモンプロセス
[ root @ li845-130〜 ] -ef | grep docker |
ルート120931 0 02:09? 00:00:00 / usr / bin / dockerデーモン//0.0.0.0 :2376

2.パスワードなしでssh接続を構成します
[ tdy218 @ Chris-ラップトップ〜] $ ssh [email protected]
最終ログイン:Mon Mar 28 03:06:07 2016 from 111.193.199.188

3.リモートDockerホストをローカルDockerマシンに追加します
[ tdy218 @ Chris-Laptop〜 ] $ docker-machine -D create --driver generic --generic-ip-address 139.162.3.130 --generic-ssh-user root linodevps
Dockerマシンバージョン:0.6.0、ビルドe27fb87
/ usr / local / bin / docker-machineでバイナリパスが見つかりました
ジェネリックドライバー用プラグインサーバーの起動
アドレス127.0.0.1:50319でリッスンしているプラ​​グインサーバー
().GetVersionを呼び出す
APIバージョン1の使用
().SetConfigRawを呼び出す
().GetMachineNameを呼び出す
(フラグルックアップ).GetMachineNameの呼び出し
(フラグルックアップ).DriverNameの呼び出し
(フラグルックアップ).GetCreateFlagsの呼び出し
/ usr / local / bin / docker-machineでバイナリパスが見つかりました
ジェネリックドライバー用プラグインサーバーの起動
アドレス127.0.0.1:50323でリッスンしているプラ​​グインサーバー
().GetVersionを呼び出す
APIバージョン1の使用
().SetConfigRawを呼び出す
().GetMachineNameを呼び出す
(linodevps).GetMachineNameの呼び出し
(linodevps).DriverNameの呼び出し
(linodevps).GetCreateFlagsの呼び出し
(linodevps).SetConfigFromFlagsの呼び出し
作成前チェックの実行...
(linodevps).PreCreateCheckの呼び出し
(linodevps).GetConfigRawの呼び出し
マシンを作成しています...
(linodevps).Createの呼び出し
(linodevps).GetConfigRawの呼び出し
(linodevps)SSHキーが指定されていません。 現在および将来このマシンに接続するには、sshエージェントに適切なキーが含まれている必要があります。
(linodevps)DBG | IP:139.162.3.130
(linodevps).DriverNameの呼び出し
(linodevps).DriverNameの呼び出し
マシンが実行されるのを待っています。これには数分かかる場合があります...
(linodevps).GetStateの呼び出し
作成されたインスタンスのオペレーティングシステムを検出しています...
SSHが利用可能になるのを待っています...
WaitForSSH関数を取得しています...
(linodevps).GetSSHHostnameの呼び出し
(linodevps).GetSSHPortの呼び出し
(linodevps).GetSSHKeyPathの呼び出し
(linodevps).GetSSHUsernameの呼び出し
SSHクライアントタイプの使用:外部
{[-o BatchMode = yes -o PasswordAuthentication = no -o StrictHostKeyChecking = no -o UserKnownHostsFile = / dev / null -o LogLevel = quick -o ConnectionAttempts = 3 -o ConnectTimeout = 10 -o ControlMaster = no -o ControlPath = none [email protected] -p 22] / usr / bin / ssh}
SSHコマンドを実行しようとしています:
出口0
SSH cmd err、出力:
プロビジョナーの検出...
(linodevps).GetSSHHostnameの呼び出し
(linodevps).GetSSHPortの呼び出し
(linodevps).GetSSHKeyPathの呼び出し
(linodevps).GetSSHUsernameの呼び出し
SSHクライアントタイプの使用:外部
{[-o BatchMode = yes -o PasswordAuthentication = no -o StrictHostKeyChecking = no -o UserKnownHostsFile = / dev / null -o LogLevel = quick -o ConnectionAttempts = 3 -o ConnectTimeout = 10 -o ControlMaster = no -o ControlPath = none [email protected] -p 22] / usr / bin / ssh}
SSHコマンドを実行しようとしています:
cat / etc / os-release
SSH cmd err、出力::NAME = "CentOS Linux"
VERSION = "7(コア)"
ID = "centos"
ID_LIKE = "rhel fedora"
VERSION_ID = "7"
PRETTY_NAME = "CentOS Linux 7(コア)"
ANSI_COLOR = "0; 31"
CPE_NAME = "cpe:/ o: centos:centos :7"
HOME_URL = " https://www.centos.org/ "
BUG_REPORT_URL = " https://bugs.centos.org/ "

CENTOS_MANTISBT_PROJECT = "CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION = "7"
REDHAT_SUPPORT_PRODUCT = "centos"
REDHAT_SUPPORT_PRODUCT_VERSION = "7"

キーCPE_NAMEを設定できませんでした。対応する構造体フィールドが見つかりませんでした
キーを設定できませんでした。対応する構造体フィールドが見つかりません
キーCENTOS_MANTISBT_PROJECTを設定できませんでした。対応する構造体フィールドが見つかりませんでした
キーCENTOS_MANTISBT_PROJECT_VERSIONを設定できませんでした。対応する構造体フィールドが見つかりませんでした
キーREDHAT_SUPPORT_PRODUCTを設定できませんでした。対応する構造体フィールドが見つかりませんでした
キーREDHAT_SUPPORT_PRODUCT_VERSIONを設定できませんでした。対応する構造体フィールドが見つかりませんでした
キーを設定できませんでした。対応する構造体フィールドが見つかりません
互換性のあるホストが見つかりました:centos
CentOSによるプロビジョニング...
devicemapperを使用して、storagedriverが指定されていません

(linodevps).GetMachineNameの呼び出し
(linodevps).GetSSHHostnameの呼び出し
(linodevps).GetSSHPortの呼び出し
(linodevps).GetSSHKeyPathの呼び出し
(linodevps).GetSSHUsernameの呼び出し
SSHクライアントタイプの使用:外部
{[-o BatchMode = yes -o PasswordAuthentication = no -o StrictHostKeyChecking = no -o UserKnownHostsFile = / dev / null -o LogLevel = quick -o ConnectionAttempts = 3 -o ConnectTimeout = 10 -o ControlMaster = no -o ControlPath = none [email protected] -p 22] / usr / bin / ssh}

4.リモートDockerホストコマンドライン。
[ root @ linodevps〜 ] -ef | grep docker |
ルート170791 0 03:06? 00:00:00 / usr / bin / dockerデーモン//0.0.0.0 :2376
ルート171851 0 03:06? 00:00:00 sudodockerバージョン
ルート1719017185 0 03:06? 00:00:00dockerバージョン

dockerデーモンプロセスが再起動されましたが、さらに2つのdocker versionプロセスがあり、docker versionコマンドを手動で実行しようとしましたが、ハングしました。

既存のDockerホストをdocker-machineコマンドラインに追加するのは非常に困難です...

Dockerエンジンが含まれていないリモートホストの場合、docker-machineコマンドラインからdocker hostを作成(docker engineをインストール)するのは簡単ですが、上記の問題として、docker-machineは制限されています。

@dweomerこれは本当ですが、

私にとって、docker-machine / docker-swarmは本番環境に対応するまでにはほど遠いので、少なくともベータ版としてマークする必要があります。 または、実際に本番環境で使用している人からの連絡を希望します...

FWIW、そのワークステーションホストから新しいホストに〜/ .dockerをドロップするだけで(ホームディレクトリが同じパスであると想定)、それは機能します。 ホームディレクトリが異なる場合は、いくつかの場所(キーや証明書など)で.jsonファイルを編集して、たとえば/Users/macuser/.docker/home/linuxuser/.dockerに変更する必要があります。

この質問は徹底的に対処されているか、他の問題ですでに確立されている根拠をカバーしているようです。 皆さんありがとう。

@nathanleclaire明確にするために、既存のDockerホスト(docker-machineによって作成されたかどうかに関係なく)を追加して、クライアントマシン間で〜/ .dockerフォルダーをコピーするための公式のアプローチはありますか? もしそうなら、ファイルの特定のサブセット/コピーする必要のあるファイルはありますか?

公式のアプローチが代わりに汎用ドライバーを使用することである場合は、ここのコメント@ tdy218に対処することが役立ちます

この質問はまったく解決されていないと思います。 私はコードを新しいマシンにプッシュしようとしています。マシンを作った人を見つけてファイルを自分のものにコピーするために、誰でもそれを思い付くことができる最善の答えです。

誰かがこれを現実の世界で試したかどうかはわかりませんが、それはひどいことです。

@TheSeanBrady市民の問題について話し合いを続けましょう。 見たい解決策の提案があれば、それを共有してください。 問題の解決策に焦点を合わせ続けましょう。

正直なところです。 これまでのところ私には機能していないので、ファイルを要求する電子メールを送信しようとします。 これは問題に対処せずに閉じられました。

正直なところです。 これまでのところ私には機能していないので、ファイルを要求する電子メールを送信しようとします。 これは問題に対処せずに閉じられました。

あなたは、何かが「ひどい」と言って、私たちの残りが「現実の世界」に住んでいないことを暗示することは、不必要に過酷で非建設的だと感じませんか?

私たちは、コラボレーションと積極性が奨励されるコミュニティの育成に努めています。 参加したい場合は、これらの原則にも従うようお願いします。

保存されたAPI資格情報、SSHキー、およびコンピューター間でdocker-machine共有する証明書を使用するため、本格的なシークレット管理/ ACLの問題が発生します。これは、他のクラスのテクノロジー全体が対処するために考案されたものです。 それは範囲においてかなり大きな問題です。 ユースケースに役立つ対策を講じることができる可能性があるので、実装するプロアクティブなソリューションを提案してみませんか?

これに対処するための提案を提出したい場合は、お気軽に。 プルリクエストのコードでバックアップされた提案も作成したい場合は、それもお勧めします。 しかし、とにかく、解決策に議論を集中し、前向きにとどまってください。

あなたは、何かが「ひどい」と言って、私たちの残りが「現実の世界」に住んでいないことを暗示することは、不必要に過酷で非建設的だと感じませんか?

フォローアップしているときはそうではありません...

この質問は徹底的に対処されているか、他の問題ですでに確立されている根拠をカバーしているようです。 皆さんありがとう。

それは私が要約解雇と呼んでいるものとほぼ同じです。 そして、「現実の世界」とは、私たちがこのようなものを使用する環境を意味し、ホールの開発者の1人を追い抜くことができる環境ではありません。

これはより適切な答えだったでしょう...

保存されたAPI資格情報、SSHキー、およびコンピューター間でDockerマシンを共有する証明書を使用するため、本格的なシークレット管理/ ACLの問題が発生します。これは、他のクラスのテクノロジー全体が対処するために考案されたものです。

...これらのテクノロジーは発明されており、それらのほとんどはオープンソースですが。

しかし、あなたが尋ねたので、SSHキー認証を使用してTLS接続に必要な証明書を渡すdocker-machine add <hostname>はどうですか?

docker-machineaddはどうですか、SSHキー認証を使用してTLS接続に必要な証明書を渡しますか?

それは問題を解決する可能性があります...少なくとも開発環境では

もう1つのオプションは、SSH経由で利用可能なホストでDockerソケットを使用することです。これは、既存のSSH認証メカニズム(私の場合はHSMでバックアップされます)を使用し、ポート/ファイアウォールを次のように調整する必要がないため、私にとって非常に好ましいです。 TLSをサポートします。

私はsocatを使用してこれに対する独自のソリューションを一緒にハッキングしましたが、docker-machineがそれをサポートできれば非常に素晴らしいでしょう。 ホストにsshを実行し、socatがまだインストールされていない場合はインストールし、socatを使用してsshセッションをリモートの/var/lib/docker.sockと通信するためのローカルソケットに変換することは難しくありません。 また、ローカルソケットを作成するためにローカルでsocatに依存しますが、docker-machineはこのドライバーモードで認証、証明書、またはTLSについて何も知る必要がないことも意味します...

既存のsshドライバーがすべてのTLSのものをセットアップする方法で、この種のローカルソケットセットアップを実行するドライバーモードを見るとよいでしょう。 多くの組織はすでにSSHキーの配布/ポートフォワーディングを解決しており、TLSのPKIを配布/管理する(そして別のポートを開く)ことを期待するのは面倒です。

tyrell:~▻ cat Library/Local/bin/ber1docker 
#!/bin/bash

DOCKER_REMOTE_HOST="ber1.local"
DOCKER_SOCK="$TMPDIR/docker.sock"
export DOCKER_HOST="unix://$DOCKER_SOCK"
rm $DOCKER_SOCK

socat UNIX-LISTEN:$DOCKER_SOCK,reuseaddr,fork \
   EXEC:"ssh root@$DOCKER_REMOTE_HOST 'socat STDIO UNIX-CONNECT:/var/run/docker.sock'" &

それで、「docker-machine add ...」はありませんか?

docker-machine add ... +1

チームメンバー全員にeval $(docker-machine env mymachine)の美しさを持たせたいと考えています(もちろん、共有開発環境の場合)。

私はdigitaloceanドライバーでドロップレットをスピンアップし、ワークステーションからdocker-composeを使用してサイトを稼働させました。

次に、サイトで作業を行う必要がありましたが、元のdocker-machineコマンドを実行したワークステーションから遠く離れたまったく別の場所から作業を行う必要がありました。

これは十分に一般的な状況ではありませんか?

これは非常に一般的な解決策です。 特に「チーム」と呼ばれるもので働く場合。 しかし、彼らは現在約18か月間このトピックを避けています。 彼らがしているのは、このような問題を解決してから、「このような機能を実装するのは非常に複雑です」などと言って、いつでも自分でそれを実行してプルリクエストを提案できることです。
過去18か月間、ソリューションの開発を開始していないように思われます。

まだ実現する簡単な方法はありませんが、返信ありがとうございます。

資格情報などをクラウドに保持します。

ドロップボックスまたはグーグルドライブを使用して保存する方法を教えてください。

それが私が使用していたドライバーなので、digitaloceanからの情報を照会させてください。

これは本当に難しいことではありません。

ええ、それは安全に聞こえます。
午前9時28分マイケル・シュワルツの水曜日、2016年11月9日には[email protected]
書きました:

資格情報などをクラウドに保持します。

ドロップボックスまたはグーグルドライブを使用して保存する方法を教えてください。

これは本当に難しいことではありません。


あなたが言及されたのであなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/docker/machine/issues/3212#issuecomment -259457472、
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/ABxbKbZQLUfK9ENnWpNKiF207ZGpXFs2ks5q8fSagaJpZM4H07I2

そもそも、コマンドとすべてのコードをインターネット経由でDOに送信するのと同じくらい安全です。

または、プライベートリポジトリを含め、すべての独自のものをdockerhubまたはgithubにアップロードします。

Dockerマシンを開発環境に追加しようとしている人は、次のようにすることができます。

docker-machine create -d "none" --url http://192.168.10.100:4243 bla

これは、ホストでTSL認証ではなくHTTPが有効になっている場合です。

私はこの文書化されていないものを見つけるのに多くの時間を費やしました

1台のマシンだけでDockerクラスターを管理できるようにするのは少し近視眼的だと思います。 クラスターを管理する責任をチームと共有するだけでなく、複数の障害点を設定したり、複数の自動エージェントがDockerクラスターと対話できるようにしたりするのはどうでしょうか。

エクスポートコマンドの場合は+1。

すべての設定と証明書を、パスワードを使用してdocker-machineでインポートできる安全なtarまたはzipファイルにエクスポートできます。

合理的な要求のようです。

@bmmatheそのコマンドはすでにtar -c ~/.docker/machine | bzip2 > docker-machine-config.tbz2です。

ここだこれで取引をLXD方法。 おそらく、証明書をコピーまたは再生成できるようにするパスワードまたはキーをマシンに構成できます。

それはとても悲しいです😖。 私のリモートマシンは、 docker-machine ls実行しているときに、ローカルでtimeoutステータスを表示するようになりました。これは、マシンの構成を台無しにしました。 ローカルのDockerマシンフォルダーでそれらを再構成/修正する方法を理解できないようです。 ローカルプロビジョニングはもう必要ありませんか? VMを削除して再作成する必要がありますか?

リモートマシンをローカルDockerマシンに追加するオプションへの投票:

docker-machine add- 運転者

⏳🤒

これは本当に重要な機能です。 なぜそんなに難しいのかわかりません。 たとえ、証明書を再生成する必要がある場合でも、私にとっては問題にはなりませんが、これを文書化し、コマンドを使用できるようにしたいと思います。

正しく覚えている場合、問題の原因は、権限が間違っているか、ローカルユーザー名がリモートユーザー名と一致しないことです(デフォルトのユーザーはdocker-user )。 それはおそらくあなたに代わっての問題です、あなたはもっと深く掘り下げる必要があります。
docker-machineコマンドの汎用ドライバーは、Googleなどのさまざまなプロバイダーで問題なく機能します。

これらを確認してください:
https: //github.com/docker/machine/issues/3522#issuecomment -280275707
https
•このトピックに関して私が解決策に導いた他の会話が見つかりません。

今日、私の場合、リモートDockerホストの障害を追加する原因を見つけました。
[ root @ linodevps〜 ]
ルート170791 0 03:06? 00:00:00 / usr / bin / dockerデーモンdockerクライアントとサーバー間のローカルfdまたはunixソケット通信が許可されないため、

これを修正するには、docker service構成ファイル(デフォルトは/usr/lib/systemd/system/docker.service)を編集し、ExecStartパラメーターの値を/ usr / bin / dockerデーモン-Htcp ://から変更する必要があります//0.0.0.0:TCP :2376 -H UNIX:///var/run/docker.sockを(デフォルトでは/ usr / binに/ドッカデーモン-H fd://)または/ usr / bin / dockerデーモン//0.0.0.0 :2376 -H fd://またはexport DOCKER_HOST = tcp://0.0.0.0 :2376、
次に、sudosystemctlデーモン-reload && sudo systemctl restart docker、docker-machine addコマンドを再実行し、しばらく待つと、正常に追加されます。 追加の過程で、docker-machineはターゲットdockerホストのssl証明書を生成し、/ etc / systemd / system /docker.service.dという名前の新しいディレクトリの下に新しいdockerservice構成ファイル10-machine.confを生成します。

tdy218 @ Chris-ラップトップ$ dm ls
名前アクティブなドライバーの状態URLスウォームドッカーエラー
docker-vm119-汎用実行tcp://192.168.135.119 :2376 v17.03.1-ce
docker-vm120-一般的な停止不明

docker-vm119は、追加する前の既存のdockerホストです。

この場合、 @ Bean Youngのおかげで、docker -machineがサポートされていることが

docker-machine create --driver none -url=tcp://123.123.123.123:2376 dockerhost1は、私が長い間Dockerについて学んだ最高のことです!

ユーザー間で開発マシンを共有する方が本当に簡単なはずです。

// cc @nathanleclaire

更新:明確にするために:具体的には、他のチームメンバーに証明書を事前に共有してもかまいません。 そこにも改善の余地があります。

@dhrp証明書を事前共有するためにどのようなプロセスに従いますか? それらはどこにありますか?

ああ、私の愛する主よ、過去1年半以上、誰もこの問題を撃ちたくないとは信じられません😞😞😞

@thaJeztah @AkihiroSuda @albers @tianonこれはあまり一般的で重要な要件ではないと本当に思いますか?

既存のDockerホストを再プロビジョニングしようとしました( docker-machine create --driver=generic --generic-ip-address <ip> <name> 、既存の証明書を無効にすることなく機能しているようです。これは、Dockerホストを最初にプロビジョニングしたのと同じマシンから実行されました...これは期待される結果ですか?

この問題を再開できますか? これはまだ解決されていないと思います。

偶然これに出くわした。

@nathanleclaireは、ポイントを明確にしました。これは、

本当にキーをチームと共有したい場合は、ソース管理のプライベートリポジトリに進み、リスクを受け入れてください。 必要なキーをエクスポートするために、誰かがすでに作成したスクリプトがあります: https

「私たちが市民になれない理由はありません」-レオニダス

私はまだdocker-machineがscpのように振る舞うべきだと思います。 複数のキーのサポートを追加できない理由は何ですか?

これに対する1つの回避策は、私が見つけたばかりです。
同じプラットフォーム上に既存のdocker-machineがあり(私のものはgoogle)、docker-machineを必要とせずにそのマシンにssh / scpできる場合は、他のマシンをコピーして動作させることができます。
やった:

mkdir ~/.docker/machine/machines/new-machine
cp -r ~/.docker/machine/machines/old-machine/* ~/.docker/machine/machines/new-machine/

#then replace all instances of "old-machine" with "new-machine" in ~/.docker/machine/machines/new-machine/config.json

#then add the public key from your new-machine folder into the authorized_keys file for the docker-user on the new machine, e.g.
scp ~/.docker/machine/machines/new-machine/id_rsa.pub docker-user<strong i="8">@new_machine</strong>:/home/docker-user
ssh docker-user<strong i="9">@new_machine</strong> -c "cat ~/id_rsa.pub >>~/.ssh/authorized_keys"

(sshコマンドを逐語的にコピーしないでください。正しく行う方法を調べてください-https://encrypted.google.com/search?hl = en&q = ssh%20copy%20public%20key)

export / importコマンドの場合は+1。
マルチキーサポートの場合は+1。

管理ワークステーションを移動できないことは、単に容認できないことであり、大規模な単一障害点を生み出します。

例:コンピューターの紛失、盗難、火災、ハードウェア障害、ソフトウェア障害、チームアクセスの問題、管理者の問題など。

Docker-machineは、それを念頭に置いて考案されたものではありません。これは、単一の開発者によるプロビジョニングのためのファーストフードツールです。 これは、単純明快で、機能します-そしてそれは無料です!

ここで説明するいくつかの機能は、Docker EEオファリング(チームやRBACなど)に実装されています。

人々が感謝できない場合は、少なくとも合理的になるようにしてください。

私はまだマシンシェアがこのスレッドで言及されているとは思わない:

machine-export <machine-name>
>> exported to <machine-name>.zip
machine-import <machine-name>.zip
>> imported

ねえ@andrevtg

感謝していないようでしたらごめんなさい。 私はdocker-machineが大好きで、これでさらに良くなると思いました。
一人の開発者がコンピューター間を簡単に移動できる機能は本当に役立つと思います。

スケジュールが空いたら、GOの学習に挑戦して、この機能を追加しようとするかもしれません。

ねえ@ dmitrym0

このチケットは、既存のリモートDockerホストに接続する機能の欠如に焦点を当てていたと思います。
とはいえ、マシン共有はローカルのDockerホストを移動するときに役立つようです。
提案をありがとう。

@ Jared-Harrington-Gibbs machine-shareは、「_既存のdocker-machinehosts_を追加する」という問題を具体的に解決します。 docker-composeを介してさまざまなアプリをデプロイしており、それは私たちにとってうまく機能します。 証明書のセットをmachine-shareでエクスポートし、それを必要とするチームのすべてのメンバーに配布します。 理想的ではありませんが、問題なく動作します。

汎用ドライバーを使用して既存のDockerホストを追加しようとしましたが、数回再試行すると正常に追加されます。

@sneak config.jsonのパスが正しいファイルを指していないため、このソリューションは私にはうまくいかないようです。 docker-machineconfig.jsonファイルに依存していると思いますが、間違っている可能性があり、まだテストしていません。

ファイルが保存されている正確なパスがわからない環境から実行している可能性があるため、これは私にとって問題となります。相対パスのオプションがある可能性がありますか?

問題が人的資源である場合、私はコミュニティに解決策を提供するために数日を割くことができます。 ただし、メンテナからの指示が必要です。 この場合の[Resolved]は、この機能をネイティブでサポートしないという決定を示していますか、それとも私が見ていない場所ですでにサポートされていますか?

これは、実装をまったく意図していない機能です。 元の開発者のマシン以外には存在しないはずの秘密鍵をリモートマシンに保存することを期待するのは意味がありません。

Docker EEでさえ、要求されるたびに異なる「クライアントバンドル」が生成されることを確認し、それらをホストに保存しません。

ここの人々は、実装が簡単な機能を求めていますが、合理的なセキュリティ上の制約があるため、実装してもまったく意味がありません。

@andrevtgリクエストは、VM自体がキーを保存することではなく(キーが完全に役に立たなくなる)、docker-machineクライアント(コードで構成され、実際のアプリケーションです)がユーザーに方法を提供することを目的としています。あるクライアントから別のクライアントにキーを自発的に送信します。

これを行う簡単な方法の1つは、キーをアーカイブにバンドルするdocker-machine exportコマンドと、このアーカイブの受信者がで説明されているマシンをインポートするための対応するdocker-machine importコマンドを提供することです。アーカイブ。 その場合、鍵の送信の境界での暗号化/復号化はユーザーの仕事です(ユーザーは、PGP電子メール、SFTP、好きなように使用できます)。

正確にdocker-machine createは、初心者が複製方法を理解または知らない巨大な構成ファイルとキーを作成します。 たぶん、sshキーの作成は、hostsファイルにキーを追加するのと同じくらい簡単ですが、それは文書化されていません。 どのコンテナに追加しますか? また、別のマシンにセットアップしてdocker-machine通知するにはどうすればよいですか? それでもdocker-machine use使用できますか、それともすべての環境変数を手動で設定する必要がありますか。

理想的には、キーを追加するためのdocker-machine add [name] 、構成ファイルをエクスポートするためのdocker-machine export 、およびそれらの構成ファイルを別のマシンにインポートするためのdocker-machine importが必要です。 キーへのアクセスを取り消すためにdocker-machine rm [name]があると便利です。

@dhrprpiで実行されているDockerサーバーを取得しました。 Dockerマシンを使用してローカルホストからアクセスしたいと思います。 だから私がしなければならないのは:
docker-machine create --driver none -url=tcp://raspberry.local:22 rpihost
これは機能しますか?

それで@ 360disrupt 、そうしましたか? 私は同じユースケースで苦労しています。

それで@ 360disrupt 、そうしましたか? 私は同じユースケースで苦労しています。

いいえ、まだです。

皆さんこんにちは。 これはまだ解決されていませんか? 私が働いている会社のすべてのアプリにdockerを使用しています。 私たちの最大の問題は、マシンの共有に関連しています。 汎用ドライバーを複数回使用しようとしましたが、そのアプローチの問題は、汎用ドライバーを使用してマシンを作成し、それを既存のサーバーに接続すると、サーバーで現在実行されているコンテナーが削除されることです。

私たちが見つけた唯一の方法は、開発者がアクセスしたいマシンをインポートおよびエクスポートするだけの単純なスクリプトをPythonで作成することでした。 このスクリプトは、すべての構成ファイルと証明書をマシンの所有者から新しいソースにコピーする役割を果たします。 それはうまく機能し、問題はありません。プライベート証明書を共有せずにマシンを共有する公式の方法がないと信じられないだけです。

私はプロジェクトで作業しており、この問題を別の方法で解決するためにGitHubで公開します。 基本的に、私はここにあるすべてのマシンのすべての証明書を集中させるPaaSを構築しているだけです。 そして、誰かがそのようなことをデプロイまたは実行したい場合は、サーバーではなく、PaaSに接続する必要があります。 それはトンネルのようなものです。 間もなく、このPaaSの最初のバージョンをリリースします。

docker-machine addまたはdocker-machine create --existing場合

これは私の問題を解決しました: machine-share :computer :: rabbit2:

@dweomer別のコンピューターから既存の

@atemerev :いいえ、そうではないと思います。 私が理解しているように、Docker Machineは、Docker対応のホストを作成/プロビジョニングするために存在します。

そうは言っても、 @ tdy218が使用すべきだと思う、やや自明ではないgenericドライバーが存在します。 genericドライバーがホストを引き継ぎ、再プロビジョニングします。 必要なのは、sshデーモンを備えた実行中のホストと、パスワードなしのsudoアクセス(または単にroot)を備えたそのホスト上のユーザーだけです。 この再プロビジョニングは、既存のDockerインストールが最大でアップグレードされるという点で非破壊的です。

これは解決された問題のように見えますが、 @ atemerevに同意する必要があることをです。開発チームとして、ほぼ毎週、他のプロビジョニングされたマシンに接続する必要があり

これで私の問題は解決しました:マシン共有💻🐇

このnpmパッケージが機能することを確認できます。

このページは役に立ちましたか?
0 / 5 - 0 評価