簡體   English   中英

網絡上的docker間撰寫通信

[英]Inter docker-compose communication over network

我有一個包含一個數據庫和許多Web應用程序的docker-compose文件。

我想只為DB提供專用的docker-compose文件,為webapps提供其他docker-compose文件。 這將幫助我重啟docker-compose of webapps,而無需自動重啟數據庫。

不幸的是,即使經過多次嘗試,webapps的docker-compose也無法“ depends_on”(或連接到)由docker-compose數據庫生成的網絡中運行的數據庫。

例如

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

docker-compose-adminer-with-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-為數據庫撰寫

docker-compose-db.yml version: '2' services : db: image: postgres:10-alpine ports:
- "5432:5432" environment: POSTGRES_USER: user1 POSTGRES_PASSWORD: changeme POSTGRES_DB: tododb
version: '2' services : db: image: postgres:10-alpine ports:
- "5432:5432" environment: POSTGRES_USER: user1 POSTGRES_PASSWORD: changeme POSTGRES_DB: tododb

用於Web應用程序的Docker-compose

docker-compose-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.

Depends_on不保證等待其他服務完成其啟動過程,它只是按順序啟動應用程序。 為了緩解您的問題,您可以在shell腳本中使用custom wait來檢查數據庫是否已啟動並正在運行。

在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

有關更多信息,請訪問此鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM