从Docker容器内部连接您的本地资源
#python #database #docker #containers

docker容器就像魔术一样,使您可以在不经过所有步骤和依赖项的情况下运行完整的刚起步应用程序。最好的部分是整个体验都是相同的。但是有时您想从容器内部连接到本地资源。

用例

如果您是Docker的新手,请查看Creating your first Docker Container - A beginner's Guide。假设您有一个创建数据库,创建表和关系并添加数据的自定义脚本。由于脚本可能需要一些依赖项,因此确保其他问题没有问题的最佳方法是将整个设置进行扩展。

代码文件夹结构

以下是上述用例的简单代码结构。

- dbstuff.py
- requirements.txt
- Dockerfile
- requirements.txt
- .env
  • dbstuff.py包含处理所有DML和DDL零件的自定义Python脚本。
  • requirements.txt具有项目使用的依赖项。
  • Dockerfile包含创建图像所需的层。
  • .env包含包含数据库连接详细信息的环境变量
DATABASE_USER=devto
DATABASE_PASSWORD=dbpass
DATABASE_HOST=localhost
DATABASE_NAME=devtotest
...

停靠图像

使用docker build创建Docker Image并使用docker run运行容器,您将面临连接TOT数据库的问题。这是因为容器正在尝试连接到其中的数据库实例,而不是在本地计算机上连接。

Normal Connection

解决方案

我们需要告诉Docker连接到主机的本地资源,而不是容器的资源。我们可以通过更改.env如下来做到这一点

...
DATABASE_HOST=host.docker.internal
...

Host Connection
现在,这将指向主机的localhost。解决问题!

创建另一个图像并运行容器,现在应该按预期工作!恭喜!您已从Docker Container内部成功连接到本地数据库

Manuel Geissinger