插件窝 干货文章 如何访问docker的服务

如何访问docker的服务

容器 宿主机 访问 端口 952    来源:    2025-04-30

访问Docker服务的几种方法

作为IT工程师,访问Docker服务有多种方式,具体取决于服务类型和网络配置。以下是主要的访问方法:

1. 访问容器内部服务

通过容器IP直接访问

# 获取容器IP地址
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名或ID

# 然后使用该IP访问服务
curl http://容器IP:端口

通过容器名称访问(在用户自定义网络中)

# 创建自定义网络
docker network create mynet

# 运行容器时加入该网络
docker run --name myapp --network mynet -d myimage

# 从另一个容器访问
docker run --network mynet -it alpine ping myapp

2. 从宿主机访问

端口映射方式

# 运行容器时将容器端口映射到宿主机端口
docker run -p 宿主机端口:容器端口 -d 镜像名

# 示例:将容器80端口映射到宿主机8080
docker run -p 8080:80 -d nginx

# 访问方式
curl http://localhost:8080

使用host网络模式

# 容器直接使用宿主机的网络
docker run --network host -d 镜像名

# 访问方式(容器服务直接暴露在宿主机端口)
curl http://localhost:容器端口

3. 从外部网络访问

通过宿主机IP访问

# 确保容器端口已映射到宿主机
docker run -p 8080:80 -d nginx

# 然后通过宿主机IP访问
curl http://宿主机IP:8080

使用反向代理(如Nginx)

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
    }
}

4. 高级访问方式

Docker Compose服务间访问

version: '3'
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  app:
    image: myapp
    # 可以直接通过服务名web访问
    environment:
      - API_URL=http://web

使用Docker Swarm或Kubernetes

  • 在集群环境中使用服务发现和负载均衡
  • 通过Ingress或LoadBalancer暴露服务

常见问题排查

  1. 无法访问服务

    • 检查容器是否运行:docker ps
    • 检查端口映射:docker port 容器名
    • 检查防火墙设置
  2. 连接被拒绝

    • 确认容器内服务确实在监听指定端口
    • 检查容器日志:docker logs 容器名
  3. 跨主机访问问题

    • 确保网络路由正确
    • 考虑使用overlay网络

根据您的具体场景和需求,可以选择最适合的访问方式。