解决办法

将 -p 换成 --net host
例如:

docker run --name one-api -d --restart always -p 3000:3000 -e TZ=Asia/Shanghai -v /root/oneapi/data:/data justsong/one-api
# 换成
docker run --name one-api -d --restart always --net host -e TZ=Asia/Shanghai -v /root/oneapi/data:/data justsong/one-api

-p 和 --net host

-p 参数

-p 参数用于将容器内部的端口映射到主机上的一个端口或一组端口。这样做的目的是使得主机上的其他进程可以通过指定的端口与容器内部的服务进行通信。

例如,如果你运行以下命令:

docker run -d -p 8080:80 nginx

这将启动一个名为 “nginx” 的容器,并将容器内部的 80 端口映射到主机上的 8080 端口。这样,你就可以通过访问主机的 8080 端口来访问容器内运行的 Nginx 服务。

使用 -p 参数时,Docker 会在主机上为容器的端口映射创建一个网络地址转换规则,从而允许主机和容器之间进行网络通信。这种方式使得容器与主机之间的网络隔离得以保持,容器的网络配置不会影响主机上的其他容器或服务。

net host 参数:

–net host 参数用于将容器直接连接到主机的网络命名空间,使得容器可以直接使用主机的网络栈,而不会在容器内创建新的网络栈。这意味着容器将与主机共享相同的网络配置,包括 IP 地址、网络接口等。

例如,如果你运行以下命令:

docker run -d --net host nginx

这将启动一个名为 “nginx” 的容器,并直接连接到主机的网络命名空间。这样,容器将使用主机的网络配置,包括主机上所有的网络接口和端口。

使用 --net host 参数时,容器的网络配置将与主机完全一致,这样可以避免端口冲突等问题。但是,这也意味着容器与主机的网络耦合度更高,容器将能够访问主机上的所有网络服务,可能会带来一些安全隐患。

综上所述,-p 参数用于将容器的端口映射到主机上的端口,而 --net host 参数用于将容器直接连接到主机的网络命名空间。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐