実行中のDockerコンテナ内でlocalhostをsshすることができません -- linux フィールド と docker フィールド と ssh フィールド と localhost フィールド と containers フィールド 関連 問題

Unable to ssh localhost within a running Docker container












18
vote

問題

日本語

ローカルホストにSSHに必要なアプリケーションのドッカーイメージを構築しています(i.e ssh user @ localhost)

Ubuntuデスクトップマシンに取り組んで、基本的なUbuntu:16.04コンテナから始めました。 以下は私のDockerFileの内容です:

<事前> <コード> FROM ubuntu:16.04 RUN apt-get update && apt-get install -y openjdk-8-jdk ssh && groupadd -r custom_group && useradd -r -g custom_group -m user1 USER user1 RUN ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa -q -N "" && cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

その後コマンドを使用してこのコンテナを構築します。

<事前> <コード> docker build -t test-container .

を使って実行する:

<事前> <コード> docker run -it test-container

コンテナが次のプロンプトで開き、キーが正しく生成され、SSHがlocalhostに有効になります。

<事前> <コード> user1@0531c0f71e0a:/$ user1@0531c0f71e0a:/$ cd ~/.ssh/ user1@0531c0f71e0a:~/.ssh$ ls authorized_keys id_rsa id_rsa.pub

その後SSH LOCALHOSTに、エラーに挨拶しました:

<事前> <コード> IEnumerable<IGrouping<'a, MyDataViewModel>> groupedResult 0

私が間違っていること、または設定する必要がある追加のネットワーク設定はありますか?私は走っているコンテナ内でlocalhostにsshしたいだけです。

英語

I'm building a Docker image for an application which requires to ssh into localhost (i.e ssh user@localhost)

I'm working on a Ubuntu desktop machine and started with a basic ubuntu:16.04 container. Following is the content of my Dockerfile:

FROM ubuntu:16.04  RUN apt-get update && apt-get install -y          openjdk-8-jdk          ssh &&          groupadd -r custom_group && useradd -r -g custom_group -m user1  USER user1  RUN ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa -q -N "" &&          cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 

Then I build this container using the command:

docker build -t test-container . 

And run it using:

docker run -it test-container 

The container opens with the following prompt and the keys are generated correctly to enable ssh into localhost:

user1@0531c0f71e0a:/$  user1@0531c0f71e0a:/$ cd ~/.ssh/ user1@0531c0f71e0a:~/.ssh$ ls authorized_keys  id_rsa  id_rsa.pub 

Then ssh into localhost and greeted by the error:

user1@0531c0f71e0a:~$ ssh user1@localhost ssh: connect to host localhost port 22: Cannot assign requested address 

Is there anything I'm doing wrong or any additional network settings that needs to be configured? I just want to ssh into localhost within the running container.

</div
              
       
       

回答リスト

19
 
vote

最初にSSHサーバーをイメージビルドスクリプトにインストールする必要があります。

  • <コード> RUN sudo apt-get install -y openssh-server

SSHサーバーを起動する必要があります。

  • <コード> RUN sudo /etc/init.d/ssh start

またはおそらくDockerFileの最後の行でさえ(コンテナの実行中にインスタンス化されている2値を持っている必要があります...)

<事前> <コード> USER root CMD [ "sh", "/etc/init.d/ssh", "start"] よりホストの

<事前> <コード> # init a container from an the image run -d --name my-ssh-container-name-01 -v /opt/local/dir:/opt/container/dir my-image-01

 

First you need to install the ssh server in the image building script:

  • RUN sudo apt-get install -y openssh-server

Then you need to start the ssh server:

  • RUN sudo /etc/init.d/ssh start

or probably even in the last lines of the Dockerfile ( you must have one binary instantiated to keep the container running ... )

 USER root  CMD [ "sh", "/etc/init.d/ssh", "start"]  

on the host than

# init a container from an the image run -d --name my-ssh-container-name-01      -v /opt/local/dir:/opt/container/dir my-image-01  
</div
 
 
3
 
vote

オペコンドのコメントに記載されている@ user2915097として、これは、コンテナ内の ssh インスタンスがIPv6を使用してホストに接続しようとしていたためです。 -46 を使用してIPv4を介した接続を強制する

<事前> <コード> $ docker run -it ubuntu ssh -4 user@hostname
 

As @user2915097 stated in the OP comments, this was due to the ssh instance in the container was attempting to connect to the host using IPv6. Forcing connection over IPv4 using -4 solved the issue.

$ docker run -it ubuntu ssh -4 user@hostname 
</div
 
 
   
   
0
 
vote

Docker Compose For My .yml ファイルに次のものを追加できました:

<コード> network_mode: "host"

Dockerの同等のものは以下のとおりです。

<コード> --net=host

 

For Docker Compose I was able to add the following to my .yml file:

network_mode: "host"

I believe the equivalent in Docker is:

--net=host

</div
 
 

関連する質問

3  Rails ServiceコンテナのRuby  ( Ruby on rails service container ) 
こんにちは私はRubyへの新人であり、私はRubyのRubyで新しいプロジェクトを始めています。私はPHPのバックグラウンドを持っていて、symfony2のような大きなフレームワークを使って働いていました。 私の質問は、Ruby On Railsが私のカスタ...

0  AWS EC2上のK8Sクラスターにコンテナを展開できないのはなぜですか?  ( Why cant deploy containers on k8s cluster on aws ec2 correctly ) 
AWS EC2を使用しているときは、テストコンテナを展開します。 <事前> <コード> apiVersion: extensions/v1beta1 kind: Deployment metadata: name: app-deployment-test...

0  Apache Serverを使用したDockerコンテナがkilled [duplicate]  ( Docker container with apache server gets killed ) 
この質問はすでにここで回答を持っています なぜDockerコンテナがすぐに終了するのか (15回答) 閉じられ...

0  Dockerコンテナ内の入力ファイルから読み出す方法  ( How to read from input file inside docker container ) 
Dockerコンテナ内で実行されるJavaに簡単なプログラムがあります。 WindowsでEclipseを使用しました - しかし、私はLinuxコンテナを作成しました(Windwos Dockerデスクトップで) PowerShellを使用してコンテナ...

0  包含DIVの内側に滞在していない情報  ( Information not staying inside the containing div ) 
DIV内の submit()1 によってビルドされているDIVテーブルを持っていますが、それは収入の境界内に留まることはありません。 目標は、サイズを制限し、テーブルの残りの部分を内側に表示するためのスクロールバーを持つことです。 私の研究に基づいて、それは...

1  ブロガーのソースコードの転記C#コンテナで失敗する  ( Posting source code in blogger fails with c sharp containers ) 
私はそして大部分のためにコードスニペットは働いていますが、ブログを公開するときにBloggerによって文字化けしている場合があります。 特に宣言されているジェネリックコンテナを宣言すると最も面倒なようです。私のブログのコード例を参照してください: http:/...

0  IISとASPNETコンテナの違いは何ですか?  ( What is the difference between iis aspnet containers ) 
私のASP.NET Framework 4.6アプリケーションをコンテンツ化したいため、次のベースイメージが表示されます。 ASPNET:4.8-20191210-WindowsServerCore-LTSC201 IIS:WindowsServerC...

6  C ++コンテナの動作  ( C containers behavior ) 
私の質問は簡単です。 STLコンテナを使用すると、(コピーコンストラクタを使用して)保存する値をコピーしますか。文字列インスタンスの代わりに文字の配列(char *)を指定した場合はどうなりますか?彼らはどのように振る舞いますか?システムスタックの代わりに情報...

17  Dockerはアプリケーションクロスプラットフォームを作るためのソリューションですか?  ( Is docker a solution for making application cross platform ) 
ブログや紹介資料を読むことによってDockerを始めました。 私の理解はDockerは単一のアプリケーションを標準化されたコンテナに包み込むことができます。コンテナはサンドボックスを提供し、アプリケーションが実行する必要があるすべての必要なリソースを提供し、ア...

4  C ++コンテナの(消去を実装するために)要素を左に移動するにはどうすればよいですか?  ( How can i shift elements to left in order to implement erase in c container ) 
前の質問から:消去を実装する方法C ++ のベクトルでは、新しいメモリを割り当てて erase を実装し、その1つを除くすべての要素を新しい配列に消去しました。答えから、それはSTLからのベクトルの標準的な方法ではありません。そこでは、ベクトルが古い要素を手に...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有