フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

Dockerから外部のサーバーへ接続する方法

設定手順

  • portsに22を指定する(ポートフォーディング用のポートを指定する)
  • extra_hostsに外部サーバー用のサーバーのIPを指定する
version: "3"
services:
  app:
    container_name: app-service
    build:
      context: ./node
    volumes:
      - ../app:/srv/app
    command: /bin/sh -c "entrypoint.sh"
    ports:
      - "3000:3000"
      - "22:22"
    networks:
      - hoge-network
    extra_hosts:
      - "db_test:192.168.0.10"

Dockerfileファイルの設定

  • openssh-clientをインストールする
  • ポートフォーワーディング時に利用する公開鍵をDocker内に追加する
  • アプリケーション起動用のコマンドとポートフォーワーディングの設定を追加したシェルスクリプトをDockerfileに設定する
FROM node

ENV LANG C.UTF-8
ENV TZ Asia/Tokyo

RUN apt-get update && \
    apt-get install -y vim less procps libssl-dev curl python make g++  && \
                                             openssh-client

# 公開鍵を設定する
RUN mkdir -p /home/node/.ssh
ADD key.pem /home/node/.ssh
ADD config /home/node/.ssh
RUN chown node:node -R /home/node
RUN chmod 700 /home/node/.ssh
RUN chmod 600 /home/node/.ssh/key.pem
RUN chmod 600 /home/node/.ssh/config

# yarn install / dev とポートフォーワーディングの設定
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT "/entrypoint.sh"

ポートフォーワーディングの設定用シェルスクリプト

  • oStrictHostKeyChecking=noで接続確認のメッセージをスキップすることができる。
#entrypoint.sh
#!/bin/sh
yarn install
yarn dev &
ssh -oStrictHostKeyChecking=no -N -L 3307:hoge.ap-northeast-2.rds.amazonaws.com:3306 -i ~/.ssh/key.pem -p 22 ec2-user@192.168.0.10

ポートフォーワーディングがすぐに切断されるため、下記の設定ファイルをdocker内に追加する

Host *
  ServerAliveInterval 15