web-dev-qa-db-ja.com

実行中のDockerコンテナー内でlocalhostをsshできません

私はローカルホストにsshする必要があるアプリケーションのDockerイメージを構築しています(つまり、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

それからlocalhostにsshし、エラーを迎えます:

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

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

17
Akshay Elavia

最初に、イメージ構築スクリプトにsshサーバーをインストールする必要があります。

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

次に、sshサーバーを起動する必要があります。

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

または、おそらくDockerfileの最後の行(コンテナを実行し続けるには、1つのバイナリをインスタンス化する必要があります...)

 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

13
Yordan Georgiev

OPコメントで@ user2915097が述べているように、これはコンテナ内のsshインスタンスがIPv6を使用してホストに接続しようとしたためでした。 -4を使用してIPv4経由で接続を強制すると、問題が解決しました。

$ docker run -it ubuntu ssh -4 user@hostname
3
sshow

Docker Composeの場合、。ymlファイルに次を追加できました。

network_mode: "Host"

Dockerで同等の機能は次のとおりです。

--net=Host

0
Gabriel Gates