Node.js環境でテストが通っています。他の言語でも同様です。環境変数を取得する方法を使うだけです。 アイデア:docker コンテナとホスト環境は分離されていますが、docker コンテナの起動時にホスト名を環境変数として渡し、コードでコンテナ内の値を取得できます。 操作:docker run -d -p 3000:3000 --name myTest -e HOST_Q=$(hostname) mytest:v1 # -eパラメータを使用して環境変数を渡します。値はホスト名です。 yml ファイルの使用を開始する場合: バージョン: '3' サービス: マイスク: イメージ:mysql:v1 コンテナ名: xx-mysql 再起動: 常に ネットワーク: - ホスト 環境: -MYSQL_ROOT_PASSWORD=xxx0209 - HOST_Q=$(ホスト名) # ここでポートを設定します: -3306:3306 ボリューム: - /opt/data/mysql:/var/lib/mysql:z 起動が成功すると、コンテナ内の環境変数に HOST_Q が追加されます。次に、プログラムを使用してそれを取得します。 ノードJS: # プロセスから環境変数オブジェクトを取得します。let env = process.env; console.log(JSON.stringify(env)); # env['HOST_Q']は取得する最終的なホスト名です# 出力 [2019-04-17T06:54:12.951Z] [e1e7115e0a33] [情報]: {"NODE_VERSION":"8.9.4","HOSTNAME":"e1e7115e0a33","YARN_VERSION":"1.3.2","HOME":"/root","HOST_Q":"emg-ubuntu-pub02","PATH":"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","PWD":"/"} ジャワ: パブリッククラステスト{ パブリック静的voidメイン(String[] args) { Map<String, String> map = System.getenv(); 文字列ホスト名 = map.get("HOST_Q"); System.out.println(ホスト名); } } 補足: dockerコンテナがホストにアクセスできず、ホストへのルートがないと報告される 1. 問題の説明docker に nacos をデプロイするときに、ホストへのルートがないため、nacos コンテナがホストの docker データベースに接続できないという問題が発生しました。 次に、nacos コンテナに入り、ホスト マシンのアドレスを ping しました。結果は接続されました。次に、telnet を使用してポート 3306 をテストしたところ、結果にもこの例外が報告されました。 理由は何ですか?外部からはデータベースに正常にアクセスできるのですが、ホストマシン内のコンテナにアクセスできないのでしょうか? 2. 原因分析Docker をデプロイするときは、ブリッジ モードを使用します。 Docker を起動すると、Docker プロセスはホストとコンテナ間の通信用に docker0 という名前の仮想ブリッジを作成します。 docker コンテナが起動すると、docker コンテナは仮想ブリッジに接続され、コンテナ内のメッセージは docker0 を介して外部に転送されます。 docker コンテナがホスト マシンにアクセスすると、docker0 ブリッジはメッセージをローカル マシンに直接転送し、メッセージの送信元アドレスは docker0 ネットワーク セグメントのアドレスになります。 Docker コンテナがホストマシン以外のマシンにアクセスする場合、Docker の SNAT ブリッジはメッセージの送信元アドレスをホストマシンのアドレスに変換し、ホストマシンのネットワーク カードを介して送信します。 そのため、Docker コンテナがホスト マシンにアクセスするときに、ホスト マシンのサービス ポートがファイアウォールによってブロックされている場合、ホスト マシンに接続できず、「ホストへのルートがありません」というエラーが表示されます。 ホストマシンが配置されている LAN 内の他のマシンにアクセスする場合、メッセージの送信元アドレスはホストマシンの IP であるため、宛先マシンのファイアウォールによってブロックされず、アクセスできます。 3. 解決策1> ホストのファイアウォールをオフにするsystemctl 停止 ファイアウォール 2> ファイアウォールで指定されたポートを開発するファイアウォールコマンド --zone=public --add-port=3306/tcp --permanent ファイアウォールコマンド --zone=public --add-port=3307/tcp --permanent ファイアウォール-cmd --reload 注意: ファイアウォール操作が完了したら、次のように docker を再起動することをお勧めします: systemctl restart docker。そうしないと、仮想ブリッジの障害により、コンテナーで iptables 失敗の問題が発生します。 IV. 要約Docker コンテナのネットワーク接続は、コンテナ間、コンテナとホスト間、ホスト間のアクセスにおいて常に問題となっているため、コンテナのネットワーク接続に関しては、ネットワークの問題に注意してください。 上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。 以下もご興味があるかもしれません:
|
<<: MySQL オンライン DDL ツール gh-ost 原理分析
>>: JavaScript の instanceof メソッドの手動実装
スロットとは何ですか? Vue では、子コンポーネント タグの中央に何もラップできないことはわかって...
この記事では、タブバーの切り替えコンテンツバーを簡単に実現するためのJavaScriptの具体的なコ...
目次1. 手順2. 修飾語3. .sync 修飾子4. まとめ1. 手順指示とは命令です。文字通りの...
仕事上の理由により、完全なオンライン化(つまり、すべてのデータがオンラインで完了し、インポートや...
この記事では、左ボタンと右ボタンをクリックすることで画像を切り替えるjQueryの具体的なコードを例...
困難SVG グラフィックの 2 つのマスクの作成まず、コード左側のピンク色のボックスの内容ですこれに...
目次1.mysqlダンプ実行プロセス:特徴2. CSVファイルをエクスポートする(最も柔軟性が高い)...
目次導入ダウンロードしてインストールする設定docker-composeをインストールする導入Doc...
1. 環境の説明(1) CentOS-7-x86_64、カーネルバージョン uname -r は、 ...
目次1. 効果の実証2. 実装チュートリアル3. 最後に、完全なコードを添付します4. その他の右ク...
データ表示は、常にあらゆる職業の人々が求めているものです。特にフロントエンド開発業界では、データを表...
目次1. トランジションとアニメーションの違い2. Vueを使用して基本的なCSSトランジションとア...
MySQL データベースにデータを挿入します。以前はよく使われていた INSERT INTO テーブ...
mysqlslap共通パラメータの説明–auto-generate-sql システムはテスト用のSQ...
MySQL にリモートでログインする場合、使用するアカウントには特別な要件があります。アカウントのデ...