EC2上にdockerでサービスを動かしていて、docker imageの中にソースコードを埋め込んでデプロイしていました。
その際に、デプロイ時にセッションが切れてしい毎回ログアウトされる問題があったので改善するようにしました。
言語はPHPを使っています。
解決方法
解決方法としては、EC2のローカル上にセッションを保存してdockerのbuild時にマウントさせることで解決しました。
セッションを保存したいローカルのディレクトリを /var/sessions
、マウント先のdockerコンテナのディレクトリはデフォルトでセッションが保存される var/lib/php/sessions
とします。
予めローカルに/var/sessions
ディレクトリを作ります。
$mkdir /var/sessions
次にdocker-compose.ymlファイルにマウントを書きます。
volumes:
- /var/sessions:/var/lib/php/sessions
こうすることで、ローカルの /var/sessions
がdockerコンテナのvar/lib/php/sessions
にマウント(コピーされるようなイメージ)されます。
そして、dockerコンテナのvar/lib/php/sessions
にセッションが保存されるとローカルの /var/sessions
にも同期されvar/lib/php/sessions
の中身と同じものができています。
セッションの確認
同じセッションが保存されているか確認してみましょう。
まずはdockerコンテナのvar/lib/php/sessions
にセッションが保存されているかを確認します。
$docker ps
$docker exec -it [CONTAINER ID] /bin/bash
$ls var/lib/php/sessions
保存されていたら、次にdockerコンテナからexitしてローカルでセッションが保存されているか確認します。
$ls /var/sessions
同じセッションが保存されていたら成功です。
サービスに戻ってログイン機能があればログイン後、一度docker-compose downしてからdocker-compose upするとログインされたままになってると思います。