如何在同一个docker-compose.yaml中连接2个docker compontens



我是 docker 世界的新手,我对如何更艰难地连接 2 个 docker 服务有一些问题。

我使用 https://memgraph.com/作为我的数据库,当我在本地运行它时,我像这样运行它

Docker run -it -p 7687:

7687 -p 3000:3000 Memgraph/Memgraph-platform

我编写了我的程序,该程序将使用mgclient连接到数据库,当我在本地运行时,一切正常。

现在我正在尝试放入 docker 容器并使用 docker-compose.yaml 运行它

我的docker-compose.yaml是:

version: "3.5"
services:
memgraph:
image: memgraph/memgraph-platform:2.1.0
container_name: memgraph_container
restart: unless-stopped
ports:
- "7687:7687"
- "3000:3000"
my_app:
image: memgraph_docker
container_name: something
restart: unless-stopped
command: python main.py

当我尝试使用此命令运行它时:

码头工人-撰写

我收到有关与服务器连接的错误。谁能告诉我关于docker-compose.yaml我错过了什么?

您的my_app如何连接到数据库?

是否使用localhost:7687(或localhost:3000)形式的连接字符串?这将在本地工作,因为您正在发布(--publish=7687:7687 --publish=3000:3000)容器的端口76873000到主机端口(使用相同的端口)。

注意:您可以在docker run时重新映射端口。例如,您可以--publish=9999:7686,然后需要使用本地主机上的端口9999来访问容器的端口7687

使用 Docker Compose 组合 2 个容器时,每个容器都会被赋予一个与服务名称匹配的名称。在这种情况下,您的 Memgraph 数据库称为memgraph(与service名称匹配)。

使用 Docker Compose,localhost采用不同的方法。从my_app开始,localhostmy_app。因此,使用 Docker Compose 下的localhostmy_app会尝试连接到自身而不是数据库。

在 Docker Compose 下,对于my_app(应用的名称),您需要通过其服务名称 (memgraph) 引用 Memgraph 。端口将保持不变,因为76873000(以正确者为准)。

注意Docker Compose 配置中的ports语句可能是多余的 *除非您希望能够从(本地)主机(您可以进行调试)访问数据库。从最佳实践的角度来看,一旦my_app能够正确访问数据库,就不需要向主机公开数据库的端口。

更新

最好将配置外部化(从应用)。以便您可以动态配置应用。执行此操作的一种简单方法是使用环境变量。

例如:

main.py

import os

conn = connect(
host=os.getenv("HOST"),
port=os.getenv("PORT"),
)

然后,当你在 Docker 下运行时,你需要设置这些值:

docker run ... --env=HOST="localhost" --env=PORT="7687" ...

在 Docker Compose 下,您可以:

version: "3.5"
services:
memgraph:
image: memgraph/memgraph-platform:2.1.0
container_name: memgraph_container
restart: unless-stopped
my_app:
image: memgraph_docker
container_name: something
restart: unless-stopped
command: python main.py
environment:
HOST: memgraph
PORT: 7687

最新更新