文章目录
前言
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:latest
restart: always
volumes:
- ./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/html
entrypoint: [ '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
- web
ports:
- '${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/
总结
之前配置了好一段时间,各种修改各种无用,最后发现门道在这里。
故连夜写成博文,方便各位小伙伴!
感觉有用的,点个赞,留个评论,让我知道对您有帮助。
2435

被折叠的 条评论
为什么被折叠?



