如何将Docker容器作为服务重用?
我已经为postgres和redis准备了一个运行的容器,用于各种用途。然而,我几个月前就从命令行开始了。现在我正在尝试安装一个新的应用程序,其方法是编写一个docker compose文件,其中包括postgres和redis作为服务 是否可以修改compose文件以指定已经运行的容器?Postgres已经在存储任何数据方面做得很好,我无法想象重用正在运行的redis会是一个问题 我应该重复使用它们吗?我突然想到,我可以为这两者运行多个容器,我不确定这会有什么不利之处(除了混乱的docker ps输出) 当我将container_name设置为现有容器的名称时,我得到了一个非常典型的错误:如何将Docker容器作为服务重用?,docker,docker-compose,docker-container,Docker,Docker Compose,Docker Container,我已经为postgres和redis准备了一个运行的容器,用于各种用途。然而,我几个月前就从命令行开始了。现在我正在尝试安装一个新的应用程序,其方法是编写一个docker compose文件,其中包括postgres和redis作为服务 是否可以修改compose文件以指定已经运行的容器?Postgres已经在存储任何数据方面做得很好,我无法想象重用正在运行的redis会是一个问题 我应该重复使用它们吗?我突然想到,我可以为这两者运行多个容器,我不确定这会有什么不利之处(除了混乱的docker
cb7cb3e78dc50b527f71b71b7842e1a1c". You have to remove (or rename) that container to be able to reuse that name.
其次是一些已在使用的端口(5432、6579等)
关于Stackoverflow的其他回答表明,如果我最初从另一个具有完全相同细节的compose文件调用这些服务,我也可以在这里这样做,它将重用它们。但我用来启动它们的命令不知何故从未写入我的bash_历史记录中,因此我甚至不确定详细信息(除了名称、端口和始终重新启动) 您正在寻找docker compose的
外部链接
关键字吗
外部链接
允许您重用已经运行的容器
根据:
此关键字链接到此docker-compose.yml之外甚至compose之外开始的容器,特别是对于提供共享或公共服务的容器。指定容器名称和链接别名(容器:别名)时,外部链接遵循与传统选项链接类似的语义
下面是语法:
external_links:
- redis_1
- project_db_1:mysql
- project_db_1:postgresql
您可能不想继续使用不知道如何创建的容器。但是,好消息是,您应该能够通过使用命令检查容器,来了解如何再次创建容器
$ docker container inspect ID
这将显示所有设置,docker compose特定的设置将位于
Config.Labels
下。对于跨项目的容器重用,您可能会对com.docker.compose.project
和com.docker.compose.service
的值感兴趣,这样,您就可以将它们传递给docker compose--project name
,并在docker compose.yaml
中使用它们作为服务的名称。您可以为容器命名。如果没有具有给定名称的容器,则这是第一次运行映像。如果找到命名容器,请重新启动容器。
这样,就可以重用容器。这是我的示例脚本
containerName="IamContainer"
if docker ps -a --format '{{.Names}}' | grep -Eq "^${containerName}\$"; then
docker restart ${containerName}
else
docker run --name ${containerName} -d hello-world
fi
您可以使用
docker inspect CONTAINER\u ID
查看详细信息。所谓“重用”,您的意思是“使用现有数据库的数据”或“使用相同的实例/进程”?@constantingalbun重用容器,而不是其中的数据库。我希望为新的应用程序创建一个新的数据库,使用它自己的用户名/密码。但是相同的实例/过程(容器是Docker上下文中的正确术语,不是吗?)“链接是一个遗留选项。我们建议改用网络。”