質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

2750閲覧

Dockerでトンネルコンテナを構築し、ホストからトンネルコンテナを経由して接続・別コンテナからトンネルコンテナを経由して接続を行いたい

yum3

総合スコア1

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/06/10 11:13

前提・実現したいこと

DockerにてAWSのRDSにトンネルを張るトンネルコンテナを構築したいと思っています。

一番聞きたいこと

  • ホストPCからトンネルコンテナを利用してAWS上のRDSに接続したい
  • 別コンテナからトンネルコンテナを利用してAWS上のRDSに接続したい

### 詳細
流れとしては、
0. WEBコンテナ
0. DB踏み台コンテナ
0. RDS
のフローで接続を行いたいと思っていますが、まずは検証を行いたいのです。

ssh-agent自体をvolumesとして指定しマウントしてそのまま使用することで秘密鍵の指定等を省いています。
現在ホストから3306ポート指定でmysql-clientで接続をしようとしてもトンネルコンテナのポートフォワードがうまく認識してくれない(もしくはコマンド指定が間違っている)
ので正しい指定方法があれば教えていただきたいです。

トンネルコンテナの中からのRDSの接続は成功しています。

ベースOSにAmazonLinuxを使用しているのは、こちらの事情なので変更はできません。また、Webコンテナはまだ作成していません。

該当のソースコード

現時点でのdocker-composeとdockerfileになります。(一部伏せています)

yml

1version: "3.9" 2services: 3 test: 4 build: 5 context: ./test 6 dockerfile: Dockerfile 7 tty: true 8 9 10 db-tunnel: 11 container_name: db 12 build: 13 context: ./ssh-db 14 dockerfile: Dockerfile 15 tty: true 16 ports: 17 - "3306:3306" 18 volumes: 19 - ./ssh-db/entrypoint.sh:/db/entrypoint.sh:ro 20 - /run/host-services/ssh-auth.sock:/tmp/ssh-agent.sock 21 entrypoint: ./entrypoint.sh 22 command: /bin/bash 23 working_dir: /db 24 environment: 25 SSH_AUTH_SOCK: "/tmp/ssh-agent.sock" 26 USER_NAME: ${USER}

ssh-db/Dockerfile

dockerfile

1FROM --platform=linux/x86_64 amazonlinux:2.0.20191217.0 2 3RUN yum -y update && \ 4 yum -y install openssh-clients 5 6# DEBUG 7# RUN yum install -y https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 8# RUN yum install -y mysql-community-client

ssh-db/entrypoint.sh

bash

1#!/bin/bash 2 3username=`echo ${USER_NAME} | sed -e 's/./-/g'` 4 5ssh -f -N -L 33306:foo.bar.hoge:3306 ${username}@xxx.xxx.xxx.xxx -o ServerAliveInterval=30 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no 6 7exec "$@"

補足情報(FW/ツールのバージョンなど)

  • MacBook Pro (13-inch, M1, 2020) BigSur 11.4
  • Docker version 20.10.6, build 370c289

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TaichiYanagiya

2021/06/11 01:22

db-tunnel から直接 RDS(foo.bar.hoge) へ接続するのではなく、xxx.xxx.xxx.xxx を経由する(xxx.xxx.xxx.xxx から RDS(foo.bar.hoge) へ接続する)のでしょうか?
yum3

2021/06/11 03:10

説明が漏れてしまい、申し訳ありません。 そのような認識で問題ないです。 xxx.xxx.xxx.xxx.は踏み台(bastion)です。
guest

回答1

0

ベストアンサー

Listen アドレスとポート番号を確認ください。

ssh -f -N -L 33306:foo.bar.hoge:3306 ${username}@xxx.xxx.xxx.xxx (略)

db-tunnel の [127.0.0.1]:33306 を Listen し、そこへ接続があった場合、xxx.xxx.xxx.xxx 経由で foo.bar.hoge:3306 に転送する設定です。

Listen アドレスが 127.0.0.1 ですので、db-tunnel コンテナ内からしか接続できません。
外部から接続するには Listen アドレスに db-tunnel コンテナの IPアドレス、または、0.0.0.0 を明示する必要があります。

また、Docker 側で ports: "3306:3306" ですので、ホストの 3306 番ポートへの接続を db-tunnel コンテナの 3306 番ポートに転送しますが、db-tunnel 側の Listen ポート 33306 とくい違っています。
db-tunnel 側の Listen ポートも 3306 にするといいのではないでしょうか。

ssh -f -N -L 0.0.0.0:3306:foo.bar.hoge:3306 ${username}@xxx.xxx.xxx.xxx (略)

投稿2021/06/11 03:27

TaichiYanagiya

総合スコア12173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yum3

2021/06/11 05:43

ありがとうございます。0.0.0.0を明示して、Docker内のipアドレスで指定することで別コンテナからもトンネルをうまく利用することができました。明示しないとローカルホストがデフォになってしまうんですね・・・。知識が足りていませんでした。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問