私はローカルホストに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したいだけです。
最初に、イメージ構築スクリプトに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
OPコメントで@ user2915097が述べているように、これはコンテナ内のssh
インスタンスがIPv6を使用してホストに接続しようとしたためでした。 -4
を使用してIPv4経由で接続を強制すると、問題が解決しました。
$ docker run -it ubuntu ssh -4 user@hostname
Docker Composeの場合、。ymlファイルに次を追加できました。
network_mode: "Host"
Dockerで同等の機能は次のとおりです。
--net=Host