我有一个 docker 容器,里面有 js 应用程序。它在任何本地主机上都能正常工作,但是当我尝试在远程服务器上运行它时,它没有互联网连接并且在第一次查询时崩溃。我尝试了不同的运行方式,但没有任何选项可以解决这个问题。关于如何解决它的任何建议?
运行命令是:
docker run --network=host --shm-size=1g --rm -u root --dns 8.8.8.8 --cap-add=NET_ADMIN --cap-add=SYS_ADMIN --device=/dev/net/tun --privileged --sysctl net.ipv6.conf.all.disable_ipv6=0 containerID
我无法从容器 shell ping IP 地址和解析名称
我建议逐步调试它,并在调试时简化您的 docker 命令。
我可以猜到你的容器根本没有启动。容器日志中有什么?
所以,如果我调试它,我会先删除每个参数,然后在交互模式下将 /bin/bash 作为运行命令运行,并检查容器是否可以使用互联网:
(containerID其实就是镜像名称或者镜像ID)
如果一切正常,我会建议一个一个地添加其他参数,并检查您有问题的参数。
另一件事是似乎拥有
--net=host
和--sysctl net.ipv6.conf.all.disable_ipv6=0
并不是真正正确的事情,因为在那种情况下您将更改主机的参数,因为您没有单独的网络堆栈,就像您在没有 . 的情况下运行时那样--net=host
。我认为错误的可能原因是: - 您的 VM 提供商不允许更改 net.ipv6.conf.all.disable_ipv6=0 - 您在 Dockerfile 中安装的包有问题(您是否使用它来构建容器,或者只是上传容器图像本身?)。您应该查看 docker 日志(可能需要删除
--rm
才能获取它们)——您的应用程序配置中存在一些错误,例如硬编码的 IP 地址或 DNS 名称,这些在服务器端环境中不存在。相信按照这些步骤你可以找到真正的原因,并解决问题。祝你好运。