簡體   English   中英

docker-compose中的Docker容器無法通過主機名找到其他容器

[英]Docker container in docker-compose can't find other containers by hostname

我正在將docker-compose文件從v1升級到v3,並且將容器鏈接在一起時遇到問題。

在docker-compose.yml之前是這樣的:

database:
  working_dir: /mnt
  volumes:
    - .:/mnt
  links:
   - postgresql_db
  ports:
    - '3000:3000'
  build: ./database
  entrypoint: python database/server.py

postgresql_db:
  build: ./database
  ports:
    - '5432:5432'

test_database:
  working_dir: /mnt
  volumes:
    - .:/mnt
  links:
    - test_postgresql_db
  ports:
    - '5053:5053'
  build: ./database/test

test_postgresql_db:
  image: postgres:latest
  ports:
    - '5432:5432'

但鏈接已被棄用。 現在容器應共享一個網絡(默認情況下應該這樣做),並且能夠使用主機名找到彼此(請參閱: 此處 )。

所以我將文件修改為:

version: '3'

networks:
  dbnet:
    driver: bridge

volumes:
  postgresql_data: {}
  postgresql_test_data: {}

services:
  database:
    build: database
    environment:
      APPLICATION_DB_CONTAINER: db
      APPLICATION_POSTGRES_HOST: db
    working_dir: /mnt
    volumes:
      - .:/mnt
    networks:
      - dbnet
    ports:
      - '3000:3000'
    command: python database/server.py

  db:
    image: postgres:latest
    volumes:
      - postgresql_data:/var/lib/postgresql/data
    networks:
      - dbnet
    depends_on:
      - database

  test_database:
    build: database/test
    environment:
      APPLICATION_DB_CONTAINER: testdb
    working_dir: /mnt
    volumes:
      - .:/mnt
    command: python -m pytest --cov=database --cov-report term --cov-report html:htmlcov database/test/

  testdb:
    image: postgres:latest
    volumes:
      - postgresql_test_data:/var/lib/postgresql/data

我遇到的問題是數據庫容器無法通過主機名找到數據庫容器,我得到(我的軟件嘗試連接每秒10秒然后停止):

錯誤:數據庫postgresql:// postgres:@db:5432 / postgres NOT found(10次嘗試)

我檢查並且數據庫容器已啟動,如果我使用其IP地址然后它可以工作,但使用主機名卻沒有。

如何鏈接數據庫和數據庫容器並確保每次都找到它?

信息:我在MacOs上運行docker Version 18.06.0-ce-mac70。

謝謝 !

編輯:試圖在db的compose文件中添加它,但沒有改變問題。

港口:'5432:5432'

sqlalchemy.exc.OperationalError:(psycopg2.OperationalError)無法將主機名“db”轉換為地址:名稱或服務未知數據庫_1 (關於此錯誤的背景: http//sqlalche.me/e/e3q8

我從sqlalchemy收到此錯誤,指示數據庫容器不知道db(或db-1)是什么,文件/ etc / hosts不包含任何其他容器的提及

正如@sachav在評論中指出的那樣,我顛倒了depends_on。

在數據庫服務中,

db:
  depends_on:
    - database
...

強制db服務在數據庫之前啟動,從而阻止數據庫知道主機db存在!

拿出來並加入

database:
  depends_on:
    - db
...

訣竅:)

謝謝@sachav,我現在就自己去面對。

暫無
暫無

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

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