0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

s6-overlayで作成されているDockerイメージにサービスを追加する

Last updated at Posted at 2023-11-12

概要

s6-overlayを使用しているDockerイメージに対し機能を追加しようとしましたが、ハマって結構な時間を取られたので、動いたコードと試したことを共有します。

必要事項

s6-overlayでサービスを動かすために、以下のことは最低限必要です。

  • runファイルの作成
  • typeファイルの作成
  • /etc/s6-overlay/s6-rc.d/配下にrunファイル、typeファイルを配置
  • /etc/s6-overlay/s6-rc.d/user/contents.d/配下に上記で追加したサービス名のファイルを配置

runファイルの作成

run
#!/usr/bin/execlineb -P
socat tcp-listen:8080,fork,reuseaddr tcp-connect:abehiroshi.la.coocan.jp:80

サービスを実行するためのコマンドを記載します。一番上の行は、alpine系のs6-overlayのイメージで使用するようです。(参考)他のディストリビューションの場合は不明。

run
#!/usr/bin/with-contenv sh
socat tcp-listen:${SOCAT_LISTENPORT},fork,reuseaddr tcp-connect:${SOCAT_CONNECTHOST}:${SOCAT_CONNECTPORT}

環境変数を使用する場合は、一番上の行が#!/usr/bin/with-contenv shになるようです。(参考

typeファイルの作成

type
longrun

初期処理に使用するスクリプト(oneshot)か、サービスとして動かすものか(longrun)を指定します。今回はサービスとして動かすため、longrunを指定します。

runファイル、typeファイルを配置

/etc/s6-overlay/s6-rc.d/に任意のサービス名(今回はsocat-1)でディレクトリを作成し、ディレクトリ内に上記で作成したrunファイルとtypeファイルを配置します。

contents.d配下にサービス名のファイルを配置

/etc/s6-overlay/s6-rc.d/user/contents.d/内に、上記で作成したディレクトリ名のファイル(今回はsocat-1)を作成します。中身は空です。

動いたコード

Dockerfile
FROM linuxserver/wireguard:latest

# socatをインストール
RUN apk add --no-cache socat

# s6-overlayで動くように処理を追加
RUN mkdir /etc/s6-overlay/s6-rc.d/socat-1 && \
(echo '#!/usr/bin/execlineb -P'; \
echo 'socat tcp-listen:8080,fork,reuseaddr tcp-connect:abehiroshi.la.coocan.jp:80'; \
) >> /etc/s6-overlay/s6-rc.d/socat-1/run && \
echo "longrun" >> /etc/s6-overlay/s6-rc.d/socat-1/type && \
touch /etc/s6-overlay/s6-rc.d/user/contents.d/socat-1

# ポート開放
EXPOSE 8080/tcp

s6-overlayを使用していたlinuxserver/wireguardのイメージに対し、socatサービスを使用してポートフォワーディングができるようにします。
8080ポートにアクセスすると、阿部寛のホームページにポートフォワードする設定としています。(動かすと、404 Not FoundでNifty側から返却されますが、ポートフォワードできていることは確認できるので問題なし)
設定ファイルをCOPYコマンドで持ってくるやり方が一般的なような気もしますが、今回は面倒でしたのでDockerFile上でファイルを作成してしまいました。

その他試したこと

chmod の有無

実行可能権限がないとエラーとなるという文献がネット上にありましたが、今回の環境ではchmodがなくても実行できました。

感想

分かればそんなに難しくありませんが、s6-overlay自体がバージョン2以前とバージョン3で記載方法が異なっているというのもあり、情報を拾い出すのに苦労しました。ほとんど英語の文献しかなかったため、内容は少ないですが少しでも本記事が助けになりましたら幸いです。

参考文献

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?