文章目录
- 前言
- 一、Docker是什么?
- 二、修改配置实现自定义端口访问Dify
- 1. 修改.env文件里NGINX服务端口号
- 2. docker-compose.yaml文件不用改!
- 3. 强制重新创建容器(即使配置未改变)
- 总结
前言
Docker镜像一般都有这两个配置文件,.env更像是个参数集合,docker-compose.yaml则引用参数集的配置集。两者相得益彰,有时候我们只需要修改.env就可以按不同配置启动镜像。
一、Docker是什么?
Docker是一组平台即服务(PaaS)的产品。它基于操作系统层级的虚拟化技术,将软件与其依赖项打包为容器。托管容器的软件称为Docker引擎。Docker能够帮助开发者在轻量级容器中自动部署应用程序,并使得不同容器中的应用程序彼此隔离,高效工作。
Docker是一个开源的平台,用于开发、交付和运行应用程序。它能够在Windows,macOS,Linux计算机上运行,并将某一应用程序及其依赖项打包至一个容器中,这些容器可以在任何支持Docker的环境中运行。容器彼此隔离,但可以通过特定的通道相互传递信息。
二、修改配置实现自定义端口访问Dify
大模型时代,谁还不会搞几个服务器、大模型的玩玩。可是,这服务器一多,默认的端口就可能起冲突。那怎么办?
这部,刚部署的Dify运行后却访问不了!既然默认端口用不成,那就给换一个。
1. 修改.env文件里NGINX服务端口号
EXPOSE_NGINX_PORT 在.env文件里是NGINX服务器在docker部署后暴漏给外部的端口配置。默认是80,我们这里改为8018,你可以改成你想用却不冲突的任何端口。如下:
# ------------------------------
# Docker Compose Service Expose Host Port Configurations
# ------------------------------
EXPOSE_NGINX_PORT=8018
EXPOSE_NGINX_SSL_PORT=443
2. docker-compose.yaml文件不用改!
在docker-compose.yaml里,可以发现nginx的port配置如下:
'${EXPOSE_NGINX_PORT:-80}:${NGINX_PORT:-80}'
EXPOSE_NGINX_PORT:-80,就是说EXPOSE_NGINX_PORT如果有配置就用配置的参数,如果没有就默认80;NGINX_PORT:-80是一个意思。
若要在 80 端口被占用的情况下,让 Dify 固定使用 8018 端口,可通过环境变量对端口映射进行修改,而无需改动 Dify 的配置文件。也就是这里不用修改也可以,只要.env文件做了参数定义就行。
nginx:image: nginx:latestrestart: alwaysvolumes:- ./nginx/nginx.conf.template:/etc/nginx/nginx.conf.template- ./nginx/proxy.conf.template:/etc/nginx/proxy.conf.template- ./nginx/https.conf.template:/etc/nginx/https.conf.template- ./nginx/conf.d:/etc/nginx/conf.d- ./nginx/docker-entrypoint.sh:/docker-entrypoint-mount.sh- ./nginx/ssl:/etc/ssl # cert dir (legacy)- ./volumes/certbot/conf/live:/etc/letsencrypt/live # cert dir (with certbot container)- ./volumes/certbot/conf:/etc/letsencrypt- ./volumes/certbot/www:/var/www/htmlentrypoint: [ 'sh', '-c', "cp /docker-entrypoint-mount.sh /docker-entrypoint.sh && sed -i 's/\r$$//' /docker-entrypoint.sh && chmod +x /docker-entrypoint.sh && /docker-entrypoint.sh" ]environment:NGINX_SERVER_NAME: ${NGINX_SERVER_NAME:-_}NGINX_HTTPS_ENABLED: ${NGINX_HTTPS_ENABLED:-false}NGINX_SSL_PORT: ${NGINX_SSL_PORT:-443}NGINX_PORT: ${NGINX_PORT:-80}# You're required to add your own SSL certificates/keys to the `./nginx/ssl` directory# and modify the env vars below in .env if HTTPS_ENABLED is true.NGINX_SSL_CERT_FILENAME: ${NGINX_SSL_CERT_FILENAME:-dify.crt}NGINX_SSL_CERT_KEY_FILENAME: ${NGINX_SSL_CERT_KEY_FILENAME:-dify.key}NGINX_SSL_PROTOCOLS: ${NGINX_SSL_PROTOCOLS:-TLSv1.1 TLSv1.2 TLSv1.3}NGINX_WORKER_PROCESSES: ${NGINX_WORKER_PROCESSES:-auto}NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-15M}NGINX_KEEPALIVE_TIMEOUT: ${NGINX_KEEPALIVE_TIMEOUT:-65}NGINX_PROXY_READ_TIMEOUT: ${NGINX_PROXY_READ_TIMEOUT:-3600s}NGINX_PROXY_SEND_TIMEOUT: ${NGINX_PROXY_SEND_TIMEOUT:-3600s}NGINX_ENABLE_CERTBOT_CHALLENGE: ${NGINX_ENABLE_CERTBOT_CHALLENGE:-false}CERTBOT_DOMAIN: ${CERTBOT_DOMAIN:-}depends_on:- api- webports:- '${EXPOSE_NGINX_PORT:-80}:${NGINX_PORT:-80}'- '${EXPOSE_NGINX_SSL_PORT:-443}:${NGINX_SSL_PORT:-443}'
3. 强制重新创建容器(即使配置未改变)
在docker镜像所在目录,运行以下命令行:
docker compose up -d --force-recreate
完成后即可使用新端口访问了,如http://127.0.0.1:8018/
总结
之前配置了好一段时间,各种修改各种无用,最后发现门道在这里。
故连夜写成博文,方便各位小伙伴!
感觉有用的,点个赞,留个评论,让我知道对您有帮助。