1

Docker Compose ファイルを使用して構成された 2 つの Docker コンテナーがあります。

  • Docker コンテナ A - (teamcity-agent)
  • Docker コンテナー B - (ビルドツール)

どちらも問題なく起動します。しかし、TeamCity のビルド プロセスの一環として、エージェント (コンテナー A) が Docker コンテナー B にある bash スクリプトを実行することを希望します (このスクリプトを実行できるのは B のみです)。

Team City で SSH ビルド ステップを使用してこれをセットアップしようとしましたが、接続が拒否されました。

それをさらに読むと、コンテナーで SSH が有効になっておらず、実際にコンテナーに SSH で接続しようとするべきではないことがわかります。

では、コンテナ A にコンテナ B でスクリプトを実行させ、A でスクリプトの出力を確認するにはどうすればよいでしょうか?

これのベストプラクティスは何ですか?

4

1 に答える 1

1

アプリケーション自体を変更しない唯一の方法は、SSH を使用することです。コンテナに SSH 接続できないというのは完全に誤りです。データベース コンテナーに SSH を使用して、その中でデータベース エクスポートを実行します。

まず、openssh-server が B にインストールされていることを確認します。次に、A と B の間にパスワードなしの接続をセットアップする必要があります。

次に、必ずコンテナーを docker-compose ファイルにリンクして、SSH ポートを公開する必要がないようにしてください。

コンテナー B の Dockerfile に追加するスニペット

RUN apt-get install -q -y openssh-server
ADD id_rsa.pub /home/ubuntu/.ssh/authorized_keys
RUN chown -R ubuntu:ubuntu /home/ubuntu/.ssh ; \
  chmod 700 /home/ubuntu/.ssh ; \
  chmod 600 /home/ubuntu/.ssh/authorized_keys

また、ホストの crontab で docker exec を使用して、コンテナーの外部でスクリプトを実行することもできます。しかし、あなたはこの極端な解決策を探しているわけではないと思います。

私はコメントを介してあなたを助けることができます

よろしく

于 2016-10-12T12:10:47.977 に答える