Ubuntu 16.04.4 LTS をホストとして実行中のコンテナの名前を変更する

Ubuntu 16.04.4 LTS をホストとして実行中のコンテナの名前を変更する

私のホスト:

» lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.4 LTS
Release:    16.04
Codename:   xenial

私のドッカー:

» docker --version 
Docker version 17.05.0-ce, build 89658be

私が試したこと:

1) コンテナ内のホスト名の設定: コンテナに適切な機能がないため失敗する

root@172:/# hostname something
hostname: you must be root to change the host name

/etc/hostname2)コンテナ内での手動編集: コンテナの再起動後は効果がなく、再起動しないと意味がありません。

3) コンテナ構成を手動で編集する: 機能しません。理由はわかりません。

sudo vi /var/lib/docker/containers/834787a141d73b359814055b5fc0ba3e1cc52effeb6f916e2adece297d600772/config.v2.json

4) ホスト内のコンテナのホスト名を名前空間ツールを使用して変更する。ここUbuntu 16.04.4 LTS:名前空間ツールにアクセスできないため、不可能です。

他にどんな選択肢がありますか?

根拠

GitLab は、リポジトリをクローンするために、現在のホスト名を GitLab ランナーに渡すようです。デフォルトのネットワークでは、コンテナに名前でアクセスすることはできず、IP アドレスでのみアクセスできます。つまり、GitLab コンテナのホスト名を IP アドレスに設定する必要がありますが、IP アドレスは実行中の場合のみ取得できます。したがって、唯一の解決策は次のとおりです。

  1. コンテナを実行する
  2. IPアドレスを調べる
  3. ホスト名をIPアドレスで上書きする
  4. これでgitlabとgitlab runnerが相互に通信できるようになりました

他の(クリーンな)オプションは、コンテナ(gitlab および gitlab-runner)をカスタム ネットワークで起動して、実際のホスト名でアクセスできるようにすることですが、現在、gitlab ランナーによって起動されたコンテナは、カスタム ネットワークの使用時にランナーによって生成された必要なコンテナ サービスにアクセスできないという問題があります。

答え1

あなたの問題に対する答えは間違っていますが、あなたが求めている答えは次のとおりです。

オプションを使用してコンテナを作成するときにホスト名を設定できます。例:

docker run --hostname example.com image_name

なぜこれが間違った答えなのでしょうか? コンテナは名前付きのペットではなく、家畜として扱う必要があるからです。コンテナを swarm スタックとして実行している場合、または docker compose を使用して実行している場合は、サービス名を使用するように gitlab とランナーを調整してください。または、 でコンテナを起動している場合はdocker run、コンテナ名を使用できますが、更新を簡単にするために、できるだけ早くサービスに切り替えることをお勧めします。


上記のさらに悪い解決策としては、コンテナに機能を追加して、コンテナ内から自身のホスト名を変更できるようにするというものがあります。これはセキュリティ上の脆弱性を生み出すため、セキュリティが重要な環境では推奨されません。

docker run --cap-add SYS_ADMIN ...

答え2

簡単に更新するには、docker ホスト マシンで実行します。docker run コマンドで次のようなオプションを使用します。

-v ./hosts:/etc/hosts -v ./hostname:/etc/hostname

コンテナ内に入ってファイルを更新する必要なく、ホストマシン上のファイルを更新できるようになります。

関連情報