Ubuntu上的Docker端口冲突
我正在使用Ubuntu,并尝试使用Xdebug(PHP调试器)配置远程调试,以便在Docker容器上工作Ubuntu上的Docker端口冲突,ubuntu,docker,port,xdebug,docker-networking,Ubuntu,Docker,Port,Xdebug,Docker Networking,我正在使用Ubuntu,并尝试使用Xdebug(PHP调试器)配置远程调试,以便在Docker容器上工作 trungdq88@ubuntu:~/# ifconfig docker0 Link encap:Ethernet HWaddr 02:42:7b:c2:ec:97 inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::42:7bff:fec2:ec97
trungdq88@ubuntu:~/# ifconfig
docker0 Link encap:Ethernet HWaddr 02:42:7b:c2:ec:97
inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:7bff:fec2:ec97/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8923 errors:0 dropped:0 overruns:0 frame:0
TX packets:13333 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5099353 (5.0 MB) TX bytes:16082560 (16.0 MB)
eth0 Link encap:Ethernet HWaddr b8:ca:3a:d3:4f:03
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
docker代理进程采用9000端口
trungdq88@ubuntu:~/# sudo netstat -tulpn | grep :9000
tcp6 0 0 :::9000 :::* LISTEN 10391/docker-proxy
trungdq88@ubuntu:~/# echo "Assume that this is my IDE" | nc -l -p 9000
nc: Address already in use
trungdq88@ubuntu:~/# echo "Hello" | nc -l -p 12345
Docker容器内部:
root@919737061a1d:/src# telnet 172.17.0.1 12345
Trying 172.17.0.1...
Connected to 172.17.0.1.
Escape character is '^]'.
Hello
Connection closed by foreign host.
(它在端口12345上工作)docker compose.yml
:
web:
build: .
ports:
- "80:80"
- "443:443"
- "9000:9000"
Dockerfile
将入口点设置为运行服务的sh
脚本(php fpm、nginx…)。我使用docker compose up
运行容器
trungdq88@ubuntu:~/# ifconfig
docker0 Link encap:Ethernet HWaddr 02:42:7b:c2:ec:97
inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:7bff:fec2:ec97/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8923 errors:0 dropped:0 overruns:0 frame:0
TX packets:13333 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5099353 (5.0 MB) TX bytes:16082560 (16.0 MB)
eth0 Link encap:Ethernet HWaddr b8:ca:3a:d3:4f:03
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
我的问题是:
- 在Ubuntu中使用Docker时是否需要公开端口
- 如果
继续侦听端口9000,如何使IDE调试功能正常工作docker proxy
- 我没有在容器中公开端口12345,但为什么最后一个示例(netcat和telnet)仍然有效
是,否则端口将根本无法打开。
见:
EXPOSE
指令通知Docker容器在运行时侦听指定的网络端口。EXPOSE
不会使主机访问容器的端口。为此,必须使用-p
标志来发布端口范围
因此,您还需要发布它,以便从主机访问:
docker run -p 9000:9000
(来自)
如果该端口不方便(因为If必须由XDebug使用),则需要更改主机端口(也就是说,在容器内部,可以继续使用9000)
请提供您的
docker run
命令好吗?@Auzias我使用docker compose up
来运行容器,我已经编辑了我的问题(添加docker compose.yml
内容)。IDE需要监听来自容器的调试信息通过的端口,在本例中为9000
。如果我们将容器中的9000
映射到主机中的1245
,这是否意味着IDE将不会在端口9000
上接收任何内容?而且IDE无法监听1245
,因为docker proxy
正在监听它?“是的,或者端口根本不会被打开。”-你能提供一个链接到一个提到这一点的文档吗?@TrungDQ“如果我们将容器中的9000映射到主机中的1245,这不意味着IDE不会在端口9000上接收任何内容吗?”是的,因此,在您的情况下,请映射到端口9000。@TrungDQ“您能提供一个指向提及此问题的文档的链接吗?”:我已经编辑了答案。如果我没有清楚地解释问题,我很抱歉。当我将端口映射为9000:9000
时,在侦听9000
的主机中有一个名为docker proxy
的进程,这使我的IDE无法启动调试会话(因为它也必须侦听9000)。如果我使用1245:9000
映射,也会发生同样的情况。
docker run -p 1245:9000