我正在使用Docker on Rails项目。我发现只有一种方法可以可靠地链接彼此的服务,即在docker-compose.yml中指定container_name。
version: '3'
services:
db:
container_name: sociaball_db
...
web:
container_name: sociaball_web
...
sphinx:
container_name: sociaball_sphinx
...因此,现在我可以用database.yml编写类似这样的代码,而不必担心数据库容器将其名称从db随机更改为db_1
common: &common
...
host: sociaball_db但是,我只能同时运行三个容器。每当我尝试运行docker-container up时,如果一些容器没有关闭,它就会抛出一个错误。
ERROR: for sociaball_db Cannot create container for service db: Conflict. The container name "/sociaball_db" is already in use by container "ee787c06db7b2a0205e3c1e552b6a5496545a78fe12d942fb792b27f3c38769c". You have to remove (or rename) that container to be able to reuse that name.这非常不方便。它经常强制显式地删除所有容器,以确保它们没有机会被破坏。有没有办法绕过这一点?
发布于 2018-08-26 16:50:54
当从一个编写文件运行多个容器时,将有一个默认网络,所有容器都附加到其中(如果没有以不同的方式指定)。
不需要通过容器或主机名引用容器,因为docker-compose会自动设置一些dns服务发现,其中每个docker-compose服务都可以通过其服务名称进行解析(密钥使用的级别比services:低一级)。
因此,名为db的名为web的服务可以访问您的数据库。不需要为此用例指定容器名称。有关更多详细信息,请参阅docker docs on networking,它还演示了一个访问数据库的rails应用程序。
https://stackoverflow.com/questions/52017929
复制相似问题