vscode中使用docker容器开发更改数据库链接后还是使用老的数据库连接

我的个人网站:
http://riun.xyz


vscode中使用docker容器开发的问题

工具:vscode

安装插件:remote container

语言:python

使用vscode进行容器化开发时,一些配置信息通常放在项目根目录的.env文件中,在代码中使用DB_URL = sha_decode(os.environ.get('HX_DATABASE'))获取相关配置并使用。下面是一个.env文件示例。

REDIS_IMAGE=redis:3.2-alpine
PATA_IMAGE=ip/bot/image_name:1.18
#HX_DATABASE=mysql+pymysql://username:password@ip:port/database?charset=utf8
HX_DATABASE=加密后的串
CALLBACK_URL=http://ip:port/router/rest?
PPX_APPKEY=密串
PPX_APPSECRET=密串
GEN_MAC_URL=http://ip:port/api/open/mac/create
TELEGRAF_UDP_CONF=ip:port:xxx
TELEGRAF_UDP_CONF2=ip:port:xxx
IS_MOCK=1

前段时间公司要将本地测试库统一迁移,所以要修改HX_DATABASE为新的内容,然后我就按照常理修改.env文件了,但是发现修改后,代码中的一部分使用到链接的地方用的是新库,另一部分用的是老库。经过和同事的一般研究发现了一些结果,谨记录。

在.env文件存放配置信息后,在config.py使用类似DB_URL = sha_decode(os.environ.get('HX_DATABASE'))的代码,获取相关配置,然后在db.py中,创建连接池,获取连接。随后即可在其他代码中import到db,并使用。

使用vscode的插件remote container可以让我们在容器内打开服务,默认开启的服务端口是8000,开启后我们可以通过8000端口访问得到对应的服务,然后访问任何一个用得到数据库的地方,展示出来的数据都是老库中的数据,因为此时的数据库连接使用的docker容器内的环境变量,在我们第一次创建容器时会读取.env文件,之后就不会随着.evn文件中对应的值改变而改变了。

而当我们添加5000端口转发,然后在vsc中debug对应的服务,再通过5000端口访问某服务,如果有使用数据库的地方,展示出来的数据都是新库中的数据。

这是因为我们debug时vsc会加载.env文件,去读取配置,更改我们debug时的环境变量,然后使用5000端口访问的时debug的服务,不会影响到容器本身的8000端口的服务。

要注意在远程打开代码时,会默认开启一个端口为8000的服务,此服务跟我们debug的5000端口的服务不相关,不影响。

要想在访问8000端口的docker服务时,加载最新的数据库配置,需要编辑 .devcontainer/docker-compose.yml 中的x-defaults.environment.HX_DATABASE的值为你所需要的最新链接,然后重新rebuid即可。

上述情况在linux上开启服务不同。

linux服务器上使用docker-compose up运行打包好的镜像,开启镜像服务时,目录下会有一个docker-compose.yml和.env文件,这个.env文件修改配置后会重启服务会生效,因为这种方式是docker服务的方式,不是使用vsc工具的远程插件开启的服务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值