可以在Docker容器之间ping但不能wget

时间:2018-12-03 15:24:38

标签: wordpress docker docker-compose

我正在使用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:

1 个答案:

答案 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)