【发布时间】:2026-02-20 20:25:01
【问题描述】:
就我个人而言,我想在 docker 上设置我的服务器(使用 docker compose)。 而且我在设置几个应用程序时遇到了一些麻烦(问题来自端口)。
我有一个完全干净的 debian 8 服务器。 我创建了 2 个存储库,一个用于 nextcloud,另一个用于 bitwarden 我首先开始了下一个云,一切都很好,所以之后我启动了 bitwarden,但我有一个错误,因为我使用的是相同的端口。但是因为我想对 https 网站和 https 网站都使用letsencrypt,我想如何配置端口和反向代理。
这个是给 nextcloud 的
version: '3'
services:
proxy:
image: jwilder/nginx-proxy:alpine
labels:
- "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true"
container_name: nextcloud-proxy
networks:
- nextcloud_network
ports:
- 80:80
- 443:443
volumes:
- ./proxy/conf.d:/etc/nginx/conf.d:rw
- ./proxy/vhost.d:/etc/nginx/vhost.d:rw
- ./proxy/html:/usr/share/nginx/html:rw
- ./proxy/certs:/etc/nginx/certs:ro
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
restart: unless-stopped
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: nextcloud-letsencrypt
depends_on:
- proxy
networks:
- nextcloud_network
volumes:
- ./proxy/certs:/etc/nginx/certs:rw
- ./proxy/vhost.d:/etc/nginx/vhost.d:rw
- ./proxy/html:/usr/share/nginx/html:rw
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
db:
image: mariadb
container_name: nextcloud-mariadb
networks:
- nextcloud_network
volumes:
- db:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro
environment:
- MYSQL_ROOT_PASSWORD=toor
- MYSQL_PASSWORD=mysql
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
restart: unless-stopped
app:
image: nextcloud:latest
container_name: nextcloud-app
networks:
- nextcloud_network
depends_on:
- letsencrypt
- proxy
- db
volumes:
- nextcloud:/var/www/html
- ./app/config:/var/www/html/config
- ./app/custom_apps:/var/www/html/custom_apps
- ./app/data:/var/www/html/data
- ./app/themes:/var/www/html/themes
- /etc/localtime:/etc/localtime:ro
environment:
- VIRTUAL_HOST=nextcloud.YOUR-DOMAIN
- LETSENCRYPT_HOST=nextcloud.YOUR-DOMAIN
- LETSENCRYPT_EMAIL=YOUR-EMAIL
restart: unless-stopped
volumes:
nextcloud:
db:
networks:
nextcloud_network:
这个是给bitwarden的
version: "3"
services:
bitwarden:
image: bitwardenrs/server
restart: always
volumes:
- ./bw-data:/data
environment:
WEBSOCKET_ENABLED: "true"
SIGNUPS_ALLOWED: "true"
caddy:
image: abiosoft/caddy
restart: always
volumes:
- ./Caddyfile:/etc/Caddyfile:ro
- caddycerts:/root/.caddy
ports:
- 80:80 # needed for Let's Encrypt
- 443:443
environment:
ACME_AGREE: "true"
DOMAIN: "bitwarden.example.org"
EMAIL: "bitwarden@example.org"
volumes:
caddycerts:
错误是:
Blockquote ERROR: for root_caddy_1 Cannot start service caddy: driver failed Programming external connectivity on endpoint root_caddy_1 xxxxxxxxxxxxxxxxxx : Bind for 0.0.0.0:80 failed: 端口已分配
【问题讨论】:
-
您应该在同一个网络上启动所有内容 + 一个新的代理服务器 (NGINX)。您可以删除到 80 和 443 的所有端口映射,而是在新代理服务器中配置子域。代理服务器将是唯一一个监听 80 和 443 端口并基于子域代理转发到相应容器的服务器。这会是一个选择吗?
-
谢谢,是的,这可能是一个不错的选择,您知道如何设置代理服务器(git hub progect 或 tuto online)吗?
标签: linux docker docker-compose