我正在尝试从 docker 容器访问我的主机系统
已尝试以下所有内容而不是 127.0.0.1 和 localhost:
gateway.docker.internal、docker.for.mac.host.internal、host.docker.internal、docker.for.mac.host.internal、docker.for.mac.localhost、
但似乎都不起作用。
如果我使用 --net=host 运行 docker run 命令,我确实可以访问 localhost,但是我的端口映射都不会暴露并且无法从外部 docker 访问。
我使用的是 Docker 版本 20.10.5,内部版本 55c4c88
更多信息。我正在运行一个名为 impervious 的软件(比特币闪电网络之上的一层)。它需要连接到本地主机 10001 上的本地 Polar 闪电节点。这是工具本身使用的配置文件(请参阅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
Run Code Online (Sandbox Code Playgroud)
我使用以下 docker 命令运行 impervious:
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
Run Code Online (Sandbox Code Playgroud)
但当它尝试连接到 host.docker.internal 上的节点时,它就会挂起
运行桌面版 docker 的 Mac。docker 并不在主机上运行,而是使用一种包含 Linux 内核的虚拟机。该虚拟机的网络与主机不同。要从 Mac 主机连接到正在运行的 docker 容器,请使用一种 VPN 连接:
当您使用交换机运行 docker 时,--net host您将容器连接到虚拟机网络,而不是连接到主机网络,因为它在 Linux 上运行。然后尝试连接到 127.0.0.1 或本地主机不允许连接到正在运行的容器。
此问题的解决方案是从正在运行的容器公开所需的端口:
docker run -p 8080:8080
Run Code Online (Sandbox Code Playgroud)
如果您需要公开容器中的所有端口,您可以使用-Pswitch。
对于相反的连接,请使用host.docker.internal容器中的 URL。
| 归档时间: |
|
| 查看次数: |
43219 次 |
| 最近记录: |