Docker-Compose 檔案:
version: '3.8'
networks:
app-tier:
driver: bridge
services:
mysql_node:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: 'sample_db'
MYSQL_USER: 'user'
MYSQL_PASSWORD: 'password'
MYSQL_ROOT_PASSWORD: 'password'
ports:
- '3306:3306'
expose:
- '3306'
volumes:
- mysql_db:/var/lib/mysql
app:
depends_on:
- mysql_node
build: .
ports:
- 3000:3000
environment:
- MYSQL_HOST=mysql_node
- MYSQL_USER=root
- MYSQL_PASSWORD=password
- MYSQL_NAME=sample_db
- MYSQL_PORT=3306
- MYSQL_HOST_IP=mysql_node
networks:
- app-tier
volumes:
- .:/app
volumes:
mysql_db:
泊塢窗檔案:
FROM node:latest
RUN mkdir app
WORKDIR /app
COPY . .
RUN npm install
EXPOSE 3000
CMD ["node", "app.js"]
源代碼:
const http = require('http')
var mysql = require('mysql');
const hostname = '0.0.0.0'
const port = 3000
console.log(process.env.MYSQL_HOST_IP)
console.log(process.env.MYSQL_PORT)
var con = mysql.createConnection({
host: "process.env.MYSQL_HOST_IP",
user: "user",
password: "password",
port: 3306
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});
當我運行docker-compose upMySQL 容器時成功啟動。但應用程式退出,錯誤代碼為Error: connect ETIMEDOUT。
當我通過本地運行應用程式時,node app.js我最終獲得了成功的“連接!” 訊息輸出到我的控制臺。
我也可以通過 MySQLWorkbench 連接到資料庫。只是當應用程式作為容器運行時,應用程式無法連接到資料庫。
uj5u.com熱心網友回復:
您已指定應用程式應位于命名網路上,而資料庫不應。然后資料庫服務在默認網路上運行,兩個容器無法相互通信。
我會從應用程式中洗掉命名網路,因為它可能不需要。
app:
depends_on:
- mysql_node
build: .
ports:
- 3000:3000
environment:
- MYSQL_HOST=mysql_node
- MYSQL_USER=root
- MYSQL_PASSWORD=password
- MYSQL_NAME=sample_db
- MYSQL_PORT=3306
- MYSQL_HOST_IP=mysql_node
volumes:
- .:/app
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/372012.html
