私は非常に特別なシナリオを持っています。いくつかのドッカーコンテナを含む仮想マシン。このコンテナの1つは、ホストのIPを知る必要があります。問題は、コンテナの構築時にホストipを渡すか、ドッカーの実行コマンドで-e
を使用すると、コンテナに「静的」(常に同じ、その瞬間の1つ)のままです。ドッカー。コンテナーのenv varに動的ホストipを追加してください。
そのVMはラップトップに置くことができ、ラップトップは異なるネットワークから移動しており、VMホストIPはリブートごとに異なる場合があります。
この特別なコンテナは--restart=always
であり、もう一度ビルドまたは「ドッカー実行」されません。そして、私が言ったように、コンテナにはバインドDNSサーバーがあり、ゾーン(ホストのIPアドレスを指し示す必要があります)をロードする必要があるため、コンテナ内部のサービスを設定するために、 )。可能であれば、環境変数varは素晴らしいでしょう。
- 「ノーマル」
私Dockerfileの終わりを出せ:これらは私のデータで
....
....
ENTRYPOINT ["/etc/bind/entrypoint.sh"]
CMD ["/usr/sbin/named", "-g", "-c", "/etc/bind/named.conf", "-u", "bind"]
エントリポイントファイル(varが右の値を持つことができれば正規表現が正常に動作します):
#!/bin/bash
sed -ri "s/IN A.*/IN A $HOSTIP/" /etc/bind/db.my.zone
exec "[email protected]"
ドッカーの実行CMD:
私が試した何docker run --name myContainer -d --restart=always -p 53:53 -p 53:53/udp myImage
- :
私は、エントリポイントがOKであると私はそれに正しい値を持つVARを提供できるかどう修正すべきではないと思います。
私はドッキングウィンドウrunコマンドで-e
を置く場合、それはホストが異なるネットワーク上にある場合でも、常に同じIPで永遠に「ハードコードさ」である。
docker run -e HOSTIP=$(ifconfig eth0 | grep netmask | awk '{print $2}') --name myContainer \
-d --restart=always -p 53:53 -p 53:53/udp myImage
私はDockerfileにCMDを修正することも失敗してみました:
CMD (export HOSTIP=$(ifconfig eth0 | grep netmask | awk '{print $2}'));/usr/sbin/named -g -c /etc/bind/named.conf -u bind
このようなことは可能ですか?ありがとう。
私はそれが私にボリュームファイルをマッピングするアイデアを与えたので、それをアップアップしました。あなたのメソッド '/ proc/net/tcp'は私にとってはうまくいかなかったが、あなたの考えは良い。私は私のソリューションを投稿します。ありがとうございました。 – OscarAkaElvis