PHPでTCPサーバを実装した場合
PHP
コードは割愛
以下注意点
- socket_bindに指定するIPアドレスを0.0.0.0にしないとコンテナ外と通信できない
- docker compose up用にechoを書いておくと分かりやすい
Dockerfile
FROM php:latest
EXPOSE ポート番号
docker-compose.yml
services:
好きな名前:
build:
context: Dockerfileのパス
dockerfile: Dockerfile
ports:
- '23:23' #ポートを指定した場合はここも設定しとく
シェルスクリプトの場合
もっと良い方法はあるかもしれない
基本的にLaravel Sailを参考に以下を書いた
シェルスクリプトとDockerfileを用意し、docker-compose.ymlに設定を追加する
コンテナ内部に送って起動時に実行されるシェルスクリプト
必要に応じて-pでポート番号を指定したり、-uでUDPにしたりする
UDPは接続が切れると再接続は出来ないような気がする
#!/bin/sh
while true; do echo "クライアントに返す文字列" | nc -l -k; done
Dockerfile
FROM alpine:latest
COPY スクリプト名 /usr/local/bin/スクリプト名
RUN chmod +x /usr/local/bin/スクリプト名EXPOSE ポート番号
ENTRYPOINT ["スクリプト名"]
docker-compose.yml
services:
好きな名前:
build:
context: Dockerfileのパス
dockerfile: Dockerfile
ports:
- '23:23' #ポートを指定した場合はここも設定しとく
TCP/UDPサーバのコンテナにデータが送信できたか確認する
docker exec -it コンテナ名 sh
ps aux #ENTRYPOINTで指定したスクリプトのPIDを確認する
cat /proc/PIDの番号/fd/1