[英]Exposing local Docker containers on internet (There are two containers linked to each other).
[英]Why will my Docker containers not talk to each other
我試圖讓我的節點快速泊塢窗容器與我的mysqldb容器對話。 但是當我查詢時,我總是得到:'connect ECONNREFUSED 127.0.0.1:3306'。 我究竟做錯了什么?
這是我的docker-compose.yml。 它旋轉了我的兩個容器。 如果我不使用容器而使用express,則my-api可以工作。 但不是一成不變。 當它在docker中運行時,express似乎路由不錯,但不會連接到另一個容器中的數據庫。
services:
api:
image: node:8
container_name: my-api
build:
context: .
dockerfile: Dockerfile
command: npm run start
volumes:
- .:/usr/app/
- /usr/app/node_modules
ports:
- "3000:3000"
depends_on:
- mysqldb
expose:
- 3000
environment:
PORT: 3000
REACT_APP_BASE_URL: http://localhost:3000
DB_HOST: localhost
DB_NAME: test
DB_USER: test
DB_PASS: test
mysqldb:
image: mysql:5.7
container_name: mysqldb
command: mysqld --user=root --verbose
volumes:
- ./schemadump.sql:/docker-entrypoint-initdb.d/schemadump.sql
ports:
- "3306:3306"
expose:
- 3306
environment:
MYSQL_DATABASE: "test"
MYSQL_USER: "test"
MYSQL_PASSWORD: "test"
MYSQL_ROOT_PASSWORD: "root"
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
這是我的碼頭工人文件
FROM node:8
WORKDIR /usr/src/app
COPY ./package.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "npm", "start" ]
這是我的數據庫連接文件:
const mysql = require('mysql')
module.exports = function databaseCall (sql) {
const connection = mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME
})
...
}
使用mysqldb
代替localhost
DB_HOST: mysqldb
容器可在docker compose環境中通過其服務名稱進行訪問。 localhost
基本上是指您的API容器本身。
Docker容器充當隔離的機器,它們具有自己的網絡,包括自己的本地主機。 Docker-compose為您創建了一個內部網絡,您應該能夠使用服務名稱在容器之間進行通信。
例如,通過API,您可以通過將host指定為“ mysqldb”來訪問數據庫
Docker容器擁有自己的DNS系統。 通過容器名稱,您可以訪問其他容器,但它們應屬於一個網絡。
// docker compose file
conatiner_name: api-app
..
networks:
- main-network
// other container
container_name:main-app
..
networks:
- main-network
// In your main app.
await axios.post('http://api-app:3000/entinty-name',{data: { name: "xyz" } });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.