我正在對一個具有多種不同服務的應用程式進行 docker 化,并且我使用 Docker Compose 檔案為所有服務實作了這個單一的 docker-compose.yml 檔案,并為每個服務實作了一個 Dockerfile。
- 前端(角度)[http://localhost:4200]
- 后端(PHP)[http://localhost:80]
- 后端資料庫(Mysql)
- 身份驗證層(NodeJS)[http://localhost:4454]
- 認證層資料庫(Mysql)
到目前為止,我已經成功地將所有這些服務容器化,但是當應用程式嘗試登錄“Auth Layer(NodeJS)”在“Backend(PHP)”API 上發送請求以在此步驟中進行一些資料處理時出現了一個問題我得到了“ECONNREFUSED 127.0.0.1:80”錯誤,但如果我在 Postman 上嘗試相同的 API,它可以作業,但不能來自“Auth Layer(NodeJS)”我也嘗試呼叫一些第三方 API,它在 AuthLayer 中也可以正常作業,所以應該成為問題,因為我是 Docker 新手,我幾天內都找不到解決方案。
這是我的 docker.compose.yml 檔案
services:
angular-service:
container_name: wms_frontend
build: ../frontend/.
ports:
- "4200:80"
php:
build:
context: .
image: wms-backend
networks:
- frontend
- backend
environment:
- MYSQL_HOST=wms-backend-mysql-app
- MYSQL_USER=wmsroot
- MYSQL_PASSWORD=pass
- MYSQL_DB=dbname
volumes:
- ./:/var/www/html/wms/backend
ports:
- "80:80"
container_name: wms-backend-php-app
mysql:
image: mysql:5.7
networks:
- backend
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_USER=wmsroot
- MYSQL_PASSWORD=pass
- MYSQL_DATABASE=dbname2
container_name: wms-backend-mysql-app
phpmyadmin:
image: phpmyadmin/phpmyadmin:4.7
depends_on:
- mysql
networks:
- backend
ports:
- "40002:40002"
environment:
- PMA_HOST=wms-backend-mysql-app
- PMA_PORT= 3306
volumes:
- /sessions
container_name: wms-backend-phpmyadmin-app
app:
container_name: auth_layer
restart: always
build: ../../auth_layer/.
networks:
- backend
volumes:
- ../../auth_layer/./:/usr/src/app
- /usr/src/app/node_modules
ports:
- "4454:4454"
links:
- db
depends_on:
db:
condition: service_healthy
db:
image: mariadb
restart: always
ports:
- "3308:3306"
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD= YES
- MYSQL_DATABASE=auth_layer
- MYSQL_USER= root
- MYSQL_PASSWORD=
volumes:
- ../../auth_layer/dump/:/docker-entrypoint-initdb.d
networks:
- backend
healthcheck:
test: ["CMD", "mysql", "-h", "db","-u","root", "mysql", "-e", "select 1"]
interval: 1s
retries: 20
networks:
local:
driver: bridge
networks:
frontend:
backend:
uj5u.com熱心網友回復:
當您的應用程式在 docker 容器中運行時,localhost它不再指向您的開發筆記本電腦(或服務器),而是指向容器本身。
由于每個應用程式都在單獨的容器中運行,當前面訪問到后面時,您不能使用localhost. aslocalhost指向前面的容器,后面沒有部署在那里。
localhost在指定連接 url 時,您應該使用容器名稱。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/416562.html
標籤:
