Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Networking 网络上的docker间通信_Networking_Docker Compose - Fatal编程技术网

Networking 网络上的docker间通信

Networking 网络上的docker间通信,networking,docker-compose,Networking,Docker Compose,我有一个docker compose文件,其中包含一个数据库和许多Web应用程序 我想有唯一的docker撰写文件只为DB和其他docker撰写文件的网络应用程序。这将帮助我重新启动docker compose of webapps,而无需自动重新启动DB 不幸的是,即使经过多次尝试,docker compose of webapps仍无法“依赖”(或连接)docker compose of database生成的网络中运行的数据库 比如说 DB和webapp在同一个docker中组合,工作正常

我有一个docker compose文件,其中包含一个数据库和许多Web应用程序

我想有唯一的docker撰写文件只为DB和其他docker撰写文件的网络应用程序。这将帮助我重新启动docker compose of webapps,而无需自动重新启动DB

不幸的是,即使经过多次尝试,docker compose of webapps仍无法“依赖”(或连接)docker compose of database生成的网络中运行的数据库

比如说

DB和webapp在同一个docker中组合,工作正常

docker-compose-adminer-with-db.yml

版本:“2”
服务:
db:
图片:postgres:10
端口:
- "5432:5432"
环境:
POSTGRES_用户:user1
POSTGRES_密码:changeme
博士后数据库:tododb
管理员:
图片:管理员
重新启动:始终
取决于:
-分贝
端口:
- 8080:8080

我想要什么

Docker为db编写

docker-compose-db.yml

版本:“2”
服务:
db:
图片:postgres:10
端口:
- "5432:5432" 环境: POSTGRES_用户:user1 POSTGRES_密码:changeme 博士后数据库:tododb

Docker compose for webapps

docker-compose-adminer.yml

版本:“2”
服务:
管理员:
图片:管理员
重新启动:始终
取决于:
-分贝
端口:
- 8080:8080
网络:
-默认情况下的组合


$docker compose-f docker-compose-db.yml up-d
使用默认驱动程序创建网络“myapp_default”
正在创建myapp_db_1。。。完成

$docker网络列表 网络ID名称驱动程序作用域 4eb66db9e09e本地桥 8290604a966b主机本地 1752afa36757 myapp_默认桥本地 D14D336953C无空本地

$docker-compose-f docker-compose-adminer.yml up-d 错误:服务“admin”依赖于未定义的服务“db”。

所依赖的并不保证等待其他服务完成其启动过程,它只是按顺序启动应用程序。 为了缓解您的问题,您可以在shell脚本中使用自定义等待来检查数据库是否已启动并正在运行

在Dockerfile中使用此代码:

ENV DOCKERIZE_VERSION v0.6.0
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
&& tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
&& rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
并在管理员映像的shell脚本中使用此代码检查db是否已启动并继续:

dockerize -wait http://$db_host:$db_port -timeout 300s

有关更多信息,请访问此

这是解决此问题的有用信息,谢谢。我假设我们不能使用“depends_on”来依赖其他docker compose中声明的服务。