无法从macos访问Docker主机

hfsqlsce  于 2023-01-29  发布在  Docker
关注(0)|答案(3)|浏览(179)

我正在尝试从Docker容器访问我的主机系统
我尝试了以下所有方法,而不是127.0.0.1和localhost:
网关.docker.内部,docker.用于.mac.主机.内部,主机.docker.内部,docker.用于.mac.主机.内部,docker.用于.mac.本地主机,
但似乎都不管用。
如果我使用--net=host运行docker run命令,我确实可以访问localhost,但是我的端口Map不会暴露,也不会从外部docker访问。
我使用的是Docker版本20.10.5,内部版本号55 c4 c88
更多信息。我正在运行一个名为impermeous的软件(比特币 lightning 网络上的一层)。它需要连接到我在localhost上的本地Polar lightning 节点:10001。下面是工具本身使用的配置文件(参见lnd部分):

# Server configurations
server:
  enabled: true # enable the GRPC/HTTP/websocket server
  grpc_addr: 0.0.0.0:8881 # SET FOR DOCKER
  http_addr: 0.0.0.0:8882 # SET FOR DOCKER
# Redis DB configurations
sqlite3:
  username: admin
  password: supersecretpassword # this will get moved to environment variable or generated dynamically
###### DO NOT EDIT THE BELOW SECTION#####
# Services
service_list:
  - service_type: federate
    active: true
    custom_record_number: 100000
    additional_service_data:
  - service_type: vpn
    active: true
    custom_record_number: 200000
    additional_service_data:
  - service_type: message
    active: true
    custom_record_number: 400000
    additional_service_data:
  - service_type: socket
    active: true
    custom_record_number: 500000
    additional_service_data:
  - service_type: sign
    active: true
    custom_record_number: 800000
    additional_service_data:
###### DO NOT EDIT THE ABOVE SECTION#####

# Lightning
lightning:
  lnd_node:
    ip: host.docker.internal 
    port: 10001 #GRPC port of your LND node
    pub_key: 025287d7d6b3ffcfb0a7695b1989ec9a8dcc79688797ac05f886a0a352a43959ce #get your LND pubkey with "lncli getinfo"
    tls_cert: /app/lnd/tls.cert # SET FOR DOCKER
    admin_macaroon: /app/lnd/admin.macaroon # SET FOR DOCKER
federate:
  ttl: 31560000 #Federation auto delete in seconds
  imp_id: YOUR_IMP_ID #plain text string of your IMP node name
vpn:
  price: 100 #per hour
  server_ip: http://host.docker.internal #public IP of your VPN server
  server_port: 51820 #port you want to listen on
  subnet: 10.0.0.0/24 #subnet you want to give to your clients. .1 == your server IP.
  server_pub_key: asdfasdfasdf #get this from your WG public key file
  allowed_ips: 0.0.0.0/0 #what subnets clients can reach. Default is entire world.
  binary_path: /usr/bin/wg #where your installed the "wg" command.
  dns: 8.8.8.8 #set your preferred DNS server here.
socket:
  server_ip: 1.1.1.1 #public IP of your socket server

我使用以下Docker命令运行impermeous:

docker run -p8881:8881 -p8882:8882  -v /Users/xxx/dev/btc/impervious/config/alice-config-docker.yml:/app/config/config.yml -v /Users/xxx/.polar/networks/1/volumes/lnd/alice/tls.cert:/app/lnd/tls.cert -v /Users/xxx/.polar/networks/1/volumes/lnd/alice/data/chain/bitcoin/regtest/admin.macaroon:/app/lnd/admin.macaroon  -it impant/imp-releases:v0.1.4

但是当它尝试连接到host.docker.internal上的节点时,它就挂起了

ar7v8xwq

ar7v8xwq1#

你试过docker-mac-net-connect吗?
问题与macOS有关,与Linux上的Docker不同,Docker for macOS不会直接在macOS主机上暴露容器网络。

wqsoz72f

wqsoz72f2#

运行桌面版Docker的Mac。Docker未在主机上运行,也未使用包含Linux内核的虚拟机。此虚拟机的网络与主机不同。要从Mac主机连接到正在运行的Docker container,请使用一种VPN连接:

当您使用--net host开关运行Docker时,您将container连接到虚拟机网络,而不是连接到主机网络,因为它在Linux上工作。然后尝试连接到127.0.0.1或localhost不允许连接到正在运行的container。
此问题的解决方案是从正在运行的container中公开所需的端口:

docker run -p 8080:8080

如果您需要从容器中公开所有端口,可以使用-P开关。
对于反向连接,请使用容器中的host.docker.internal URL。
More documentation about docker desktop for Mac networking

toe95027

toe950273#

您可以使用host.docker.internal,它提供macos的本地主机。
https://docs.docker.com/desktop/networking/#i-want-to-connect-from-a-container-to-a-service-on-the-host
主机的IP地址正在更改(如果您没有网络访问权限,则没有)。建议您连接到特殊DNS名称host.docker.internal,该名称将解析为主机使用的内部IP地址。这是出于开发目的,在Docker Desktop以外的生产环境中不起作用。

相关问题