如何从lan上的另一台机器访问Docker容器

时间:2016-09-01 02:20:29

标签: docker docker-container docker-for-mac docker-desktop

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

容器是 nginx网络服务器,可在~/.aws total 8 -rw------- 1 root root 10 Aug 31 14:47 config -rw-r--r-- 1 root root 349 Aug 31 14:50 credentials exec("aws s3 cp $s3_location $local_dest") 访问,但无法从同一LAN网络上的其他系统访问。

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

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

localhost:80
  

码头信息

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
用于启动容器的

命令:

Containers: 4
 Running: 3
 Paused: 0
 Stopped: 1
Images: 38
Server Version: 1.12.1
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 310
 Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: host bridge null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options: seccomp
Kernel Version: 4.4.19-moby
Operating System: Alpine Linux v3.4
OSType: linux
Architecture: x86_64
CPUs: 6
Total Memory: 11.71 GiB
Name: moby
ID: LBLG:7UQC:W67Q:J744:QAHE:4JLX:QRVB:2QQD:PTB2:MV75:HD6Y:FROD
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
 File Descriptors: 50
 Goroutines: 72
 System Time: 2016-09-01T06:51:40.063477725Z
 EventsListeners: 1
No Proxy: *.local, 169.254/16, *.dev
Registry: https://index.docker.io/v1/
Experimental: true
Insecure Registries:
 artifactory.service.dev:5000
 127.0.0.0/8

1 个答案:

答案 0 :(得分:4)

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

docker run -d --name myserver -p 80:80 nginx:1.10-alpine

编辑:示例撰写文件。

创建服务内部的桥接网络(骨干网)。他们都通过这个网络进行沟通。唯一的外部访问点是通过你的nginx代理(ports:section)。

不要在任何地方使用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