如何从局域网上的另一台机器访问Docker容器

如何从局域网上的另一台机器访问Docker容器,docker,docker-container,docker-for-mac,docker-desktop,Docker,Docker Container,Docker For Mac,Docker Desktop,我正在使用Mac的Docker Desktop,并在主机上运行一个容器。我可以通过主机上的localhost访问容器。但它不能从局域网上的其他系统获得 容器为nginx web服务器,可在localhost:80上访问,但不能从同一局域网上的其他系统访问 我希望其他系统能够访问主机上的容器 编辑1:添加docker compose配置和“docker info”命令输出 version: '2' services: nginx: image: artifactory.service

我正在使用Mac的Docker Desktop,并在主机上运行一个容器。我可以通过主机上的localhost访问容器。但它不能从局域网上的其他系统获得

容器为nginx web服务器,可在
localhost:80
上访问,但不能从同一局域网上的其他系统访问

我希望其他系统能够访问主机上的容器

编辑1:添加docker compose配置和“docker info”命令输出

version: '2'

services:
  nginx:
    image: artifactory.service.dev:5000/nginx:latest
    network_mode: host
    ports:
      - "80:80"
      - "10001-10020:10001-10020"
      - "8080:8080"
    volumes:
      - ~/docker/.docker/nginx/html:/usr/share/nginx/html

  redis:
    image: artifactory.service.dev:5000/redis:latest
    restart: always
    ports:
      - "6379:6379"

  activemq:
    image: artifactory.service.dev:5000/rmohr/activemq:5.11.1
    restart: always
    ports:
      - "61613:61613"
      - "61616:61616"
      - "8161:8161"

  oracle:
    image: artifactory.service.dev:5000/oracle-12c:latest
    restart: always
    ports:
      - "1521:1521"
    volumes:
      - ~/docker/.docker/oracle:/tmp/oracle:ro
    privileged: true
码头工人信息

用于启动容器的命令:

docker-compose up -d nginx

您没有列出正在使用的命令。 这对我有用。我可以从iphone(相同的wi-fi网络)使用mac的ip地址访问它

编辑:示例编写文件

创建服务内部的网桥网络(主干网)。他们都通过这个网络进行通信。唯一的外部访问点是通过nginx代理(端口:部分)

不要在任何地方使用ip地址(例如在nginx.conf中)。仅使用服务名称。例如使用
oracle:1521
连接到oracle

找其他地方存储html文件~/docker/.docker只能由docker使用

version: "2"

services:
  nginx:
  image: artifactory.service.dev:5000/nginx:latest
  ports:
    - "80:80"
    - "10001-10020:10001-10020"
    - "8080:8080"
  volumes:
    - ~/docker/.docker/nginx/html:/usr/share/nginx/html
  networks:
    - backbone

  redis:
  image: artifactory.service.dev:5000/redis:latest
  restart: always
  expose:
    - "6379"
  networks:
    - backbone

  activemq:
  image: artifactory.service.dev:5000/rmohr/activemq:5.11.1
  restart: always
  expose:
    - "61613"
    - "61616"
    - "8161"
  networks:
    - backbone

  oracle:
  image: artifactory.service.dev:5000/oracle-12c:latest
  restart: always
  expose:
    - "1521"
  volumes:
    - ~/docker/.docker/oracle:/tmp/oracle:ro
  privileged: true
  networks:
    - backbone

networks:

  backbone:
    driver: bridge

谢谢你的回答。我已经用docker compose配置更新了这个问题,我用它来启动容器,因为它在默认网桥网络上运行。将
network\u mode:host
添加到您的nginx服务定义中(假设您使用的是
version:“2”
撰写文件,如果不先转换为version 2)。我用
网络模式更新了docker compose配置:主机
仍存在相同问题。本地主机url正在工作,但不来自同一lan网络上的任何系统。我正在使用docker compose的第2版。感谢您的帮助。在上面的帖子中添加编辑行,并添加完整的dockerfile列表。还添加由
docker info
打印的内容,以及使用docker compose配置和docker info更新的用于启动服务的命令行(例如:
docker compose up-d
docker run -d --name myserver -p 80:80 nginx:1.10-alpine
version: "2"

services:
  nginx:
  image: artifactory.service.dev:5000/nginx:latest
  ports:
    - "80:80"
    - "10001-10020:10001-10020"
    - "8080:8080"
  volumes:
    - ~/docker/.docker/nginx/html:/usr/share/nginx/html
  networks:
    - backbone

  redis:
  image: artifactory.service.dev:5000/redis:latest
  restart: always
  expose:
    - "6379"
  networks:
    - backbone

  activemq:
  image: artifactory.service.dev:5000/rmohr/activemq:5.11.1
  restart: always
  expose:
    - "61613"
    - "61616"
    - "8161"
  networks:
    - backbone

  oracle:
  image: artifactory.service.dev:5000/oracle-12c:latest
  restart: always
  expose:
    - "1521"
  volumes:
    - ~/docker/.docker/oracle:/tmp/oracle:ro
  privileged: true
  networks:
    - backbone

networks:

  backbone:
    driver: bridge