[英]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.