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するとログインされたままになってると思います。