我正在使用docker-compose设置一个NextJS应用,该应用从运行在单独容器中的Wordpress REST-API中获取数据。
问题是,当我尝试从NextJS容器中获取或获取wordpress容器http://wordpress:8000时,我得到了ECONNREFUSED
。我可以ping wordpress:8000没问题。
如果我使用Postman或尝试使用公共ip从另一台主机(即不是运行docker-compose的计算机)获取REST-API,则效果很好。
我怀疑某些docker配置问题,但由于ping正常工作,而wget却无法正常工作,我很迷茫。
知道罪魁祸首的人是谁吗?
我的docker-compose.yml :
version: '2'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: ***REMOVED***
MYSQL_DATABASE: ***REMOVED***
MYSQL_USER: ***REMOVED***
MYSQL_PASSWORD: ***REMOVED***
networks:
- back
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- ./wp-content:/var/www/html/wp-content
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: ***REMOVED****
networks:
- back
phpmyadmin:
depends_on:
- db
image: phpmyadmin/phpmyadmin
restart: always
ports:
- 8080:80
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: ***REMOVED***
networks:
- back
next-app:
depends_on:
- wordpress
build:
context: ./next-app
dockerfile: Dockerfile
volumes:
- './next-app:/usr/src/app'
- '/usr/src/app/node_modules'
ports:
- '80:3000'
networks:
- back
express-server:
build:
context: ./express-server
dockerfile: Dockerfile
ports:
- '3001:3001'
networks:
back:
driver: bridge
volumes:
db_data:
答案 0 :(得分:1)
在NextJS容器内部,您需要使用端口80
。端口8000
来自您的(主机)计算机。因此,请从docker容器内部使用http://wordpress:80。
ports:
- "8000:80"
在您的Docker中,撰写的内容只是说:“将我的本地(主机)端口8000
映射到容器端口80
”,但是在docker网络内部,它仍然是端口80
>
您可以ping通,因为ping不使用端口。我们正在谈论的端口是TCP / UDP端口,请参阅https://en.wikipedia.org/wiki/Port_(computer_networking)。但是ping使用ICMP(Internet控制消息协议)协议,该协议根本不使用端口,请参见https://en.wikipedia.org/wiki/Ping_(networking_utility)