我的应用程序运行在VPS上,使用Docker Compose。我在文件目录中有一个.env文件,与docer-compose. yml处于同一级别。
在我的docker-compose中,我像这样设置环境变量:
当我在本地运行应用程序时,一切都运行正常,但问题出在已部署的应用程序上:
我只能在服务器端的getServerSideProps函数中访问变量,但是在客户端却未定义(我试图访问以NEXT_PUBLIC_开头的变量)。
我的解决方法是将所需的env变量的值作为 prop 从getServerSideProps传递到页面,但这非常不方便,而且肯定不是正确的解决方案。
您知道什么会导致此问题吗?
此外,在VPS上,当我检查NextJS应用程序的容器(docker exec -it...)时,我键入“env”,我看到环境变量在那里,所以我不明白为什么客户端没有接收到它们。
2条答案
按热度按时间mrfwxfqh1#
如文档所述,如果您的env变量具有前缀“NEXT_PUBLIC_”,则它可以在客户端可见,但如果不是这种情况,例如在没有Docker的情况下构建并使用“npm start”测试构建文件后,问题存在,可能是因为命令使用了错误的环境,如果不是,则一定是Docker端的问题!顺便说一句,您也可以使用env-cmd库
omtl5h9j2#
刚从文件上看出来,它说:
由于NEXT_PUBLIC_前缀,该值将内联到发送到浏览器的JavaScript中。此内联发生在构建时,因此需要在构建项目时设置各种NEXT_PUBLIC_env。
您在docker compose中设置的环境变量在构建时不可用,仅在运行时可用。