问题描述
我有一个 docker 设置,由一个 compose 文件组成,其中包含 2 个服务和一个在独立容器中运行的应用程序。
我的撰写文件具有这种结构
version: '3'
services:
synapse:
image: docker.io/matrixdotorg/synapse:latest
depends_on:
- db
ports:
- 8008:8008
db:
image: docker.io/postgres:12-alpine
# other commandds
当我执行 docker-compose up
时,一个名为 synapse_default
的默认网络。并且突触服务能够使用 db
作为主机连接到 db
。那是我的 postgres URL 看起来像这样 postgres://synapse:synapse@db/postgres
。您会注意到主机名是 db
,这是有效的,因为它们运行在同一个 docker 网络中。
现在我在使用 docker run --network=synapse_default
运行的另一个容器中有一个独立的应用程序,该应用程序能够使用服务名称作为主机地址连接到突触和数据库服务。
我现在的问题是让突触服务与独立应用程序对话。由于此独立应用程序不是撰写文件的一部分,因此它没有服务名称,因此我不确定要指定什么作为 synapse
服务的主机才能访问独立应用程序。>
解决方法
您可以使用 docker ps
找到“独立应用程序”的名称:
~$ docker ps
CONTAINER ID CREATED STATUS NAMES
205f1583e0a0 42 seconds ago Up 40 seconds foo
上面示例中的 foo
是您可以使用的名称。如果您觉得方便,也可以使用 205f1583e0a0
(CONTAINER ID)。如果您希望使用特定名称(如示例中的 foo
),您必须使用 --name
参数运行独立应用程序:
docker run --name=foo ...
,
我通过在运行我的独立容器时指定 --hostname
使其工作。
我只是保持这个问题的开放性,因为我已经有了一个答案,但这是一个薄弱的问题,因为我没有进行适当的研究。一个快速的 docker run --help
为我提供了我需要的答案。