Networking 网络上的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.ymlNetworking 网络上的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中组合,工作正常
版本:“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中声明的服务。