我使用 adminer 而不是 nginx-proxy。相关的 docker-compose 行:
version: "3"
services:
nginx:
image: "jc21/nginx-proxy-manager:latest"
hostname: websin.space
container_name: npm
restart: always
ports:
- "80:80"
- "81:81"
- "443:443"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
db:
image: mysql:latest
volumes:
- ./db:/var/lib/mysql
- ./init:/docker-entrypoint-initdb.d
restart: always
environment:
MYSQL_ROOT_PASSWORD: doNotTellPasswordsOnStackOverflow
MYSQL_DATABASE: so
MYSQL_USER: so
MYSQL_PASSWORD: doNotTellPasswordsOnStackOverflow
adminer:
image: adminer
restart: always
ports:
- 9080:8080
environment:
ADMINER_DEFAULT_SERVER: db
depends_on:
- db
现在,当我部署它时,我可以通过以下方式连接到数据库
http://websin.space:9080
,因为我在 yaml 文件中指定了端口。
但是,我希望确保此连接的安全。 我该怎么做?
TL;DR:让Docker第一次分配端口然后使用它
更换
ports:
- 9080:8080
与
ports:
- 8080
在端口部分仅保留 8080 端口。然后运行
docker ps
docker compose 会默认分配一些端口
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
3d766a78be19 adminer "entrypoint.sh php -…" 10 seconds ago Up 9 seconds 0.0.0.0:32768->8080/tcp, :::32768->8080/tcp
然后在nginx代理中将端口转发到端口
32768
并让它创建ssl证书
稍后,再次将端口部分替换为
ports:
- 32768:808
即使重启后,SSL 也会保留。
可能有比这更好的解决方案,仍然欢迎建议