Inter docker-通过网络组成通信

时间:2018-05-25 17:20:24

标签: networking docker-compose

我有一个docker-compose文件,其中包含一个数据库和许多webapps。

我想为webapps的DB和其他docker-compose文件提供独有的docker-compose文件。这将帮助我重新启动docker-compose的webapps,而不会自动重启DB。

不幸的是,即使经过多次不同的尝试,网络应用程序的docker-compose也无法依赖' (或连接)由docker-compose数据库生成的网络中运行的数据库。

例如

DB和webapp在同一个docker-compose中,工作正常。

搬运工-撰写-adminer与 - db.yml version: '2' services : db: image: postgres:10-alpine ports: - "5432:5432" environment: POSTGRES_USER: user1 POSTGRES_PASSWORD: changeme POSTGRES_DB: tododb admin: image: adminer restart: always depends_on: - db ports: - 8080:8080

我想要什么

Docker-compose for db

搬运工-撰写-db.yml version: '2' services : db: image: postgres:10-alpine ports:
- "5432:5432" environment: POSTGRES_USER: user1 POSTGRES_PASSWORD: changeme POSTGRES_DB: tododb

Docker-compose for webapps

搬运工-撰写-adminer.yml version: '2' services : admin: image: adminer restart: always depends_on: - db ports: - 8080:8080 networks: - composeforani_default

$ docker-compose -f docker-compose-db.yml up -d Creating network "myapp_default" with the default driver Creating myapp_db_1 ... done

$ docker network list NETWORK ID NAME DRIVER SCOPE 4eb66db9e09e bridge bridge local 8290604a966b host host local 1752afa36757 myapp_default bridge local d14d3369531c none null local

$ docker-compose -f docker-compose-adminer.yml up -d ERROR: Service 'admin' depends on service 'db' which is undefined.

1 个答案:

答案 0 :(得分:0)

depends_on不保证等待其他服务完成其启动过程它只是在订单中启动应用程序。 要缓解您的问题,您可以在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

并在adminer image的shell脚本中使用此代码来检查db是否已启动并继续:

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

有关详细信息,请访问此link