Pro*_*ton 16 ubuntu debian nginx docker
我有一个Rails应用程序,我想在Ubuntu服务器上使用Docker部署它。我已经为应用程序设置了 Dockerfile,现在我想查看其容器中的conf。nginx
我运行以下命令以nginx交互模式启动容器:
docker run -i -t nginx:latest /bin/bash
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试安装nano编辑器,以便使用以下命令查看nginx配置 ( nginx.conf)的配置:
apt-get update
apt-get install nano
export TERM=xterm
Run Code Online (Sandbox Code Playgroud)
但是,当我运行第一个命令时apt-get update,出现以下错误:
Err:1 http://security.debian.org/debian-security buster/updates InRelease
Temporary failure resolving 'security.debian.org'
Err:2 http://deb.debian.org/debian buster InRelease
Temporary failure resolving 'deb.debian.org'
Err:3 http://deb.debian.org/debian buster-updates InRelease
Temporary failure resolving 'deb.debian.org'
Reading package lists... Done
W: Failed to fetch http://deb.debian.org/debian/dists/buster/InRelease Temporary failure resolving 'deb.debian.org'
W: Failed to fetch http://security.debian.org/debian-security/dists/buster/updates/InRelease Temporary failure resolving 'security.debian.org'
W: Failed to fetch http://deb.debian.org/debian/dists/buster-updates/InRelease Temporary failure resolving 'deb.debian.org'
W: Some index files failed to download. They have been ignored, or old ones used instead.
Run Code Online (Sandbox Code Playgroud)
我已经检查得很好它与网络连接无关。我需要一些帮助。谢谢你。
小智 117
为 docker 容器指定 DNS 服务器对我很有帮助。
创建一个/etc/docker/daemon.json包含以下内容的文件:
{
"dns": ["8.8.8.8", "8.8.4.4"]
}
Run Code Online (Sandbox Code Playgroud)
并重新启动 docker 服务:
sudo service docker restart
Run Code Online (Sandbox Code Playgroud)
源代码:https://docs.docker.com/engine/install/linux-postinstall/#specify-dns-servers-for-docker
Mar*_*res 36
我只是重新启动了 docker,这对我有用。
sudo service docker restart 或者 sudo /etc/init.d/docker restart
在遇到这个问题之前,docker 工作正常。如果你从来没有让 docker 工作,那么你可能会有不同的问题。
小智 10
运行这个命令:
echo -e "名称服务器 8.8.8.8\n名称服务器 8.8.4.4" |sudo tee -a /etc/resolv.conf
那次跑步之后——
sudo apt-get 更新
这对我有用。
sudo vi /etc/docker/daemon.json
Run Code Online (Sandbox Code Playgroud)
并检查 iptables 的标志,如果未添加,也添加 DNS
{...., "iptables":true,"dns": ["8.8.8.8", "8.8.4.4"]}
Run Code Online (Sandbox Code Playgroud)
然后
sudo service docker restart
Run Code Online (Sandbox Code Playgroud)
解决了我
这是我解决它的方法:
以交互模式启动应用程序的 docker 容器,在我的例子中它是一个nginx容器:
docker run -i -t nginx:latest /bin/bash
Run Code Online (Sandbox Code Playgroud)
运行以下命令以授予该文件read的others角色权限resolv.conf:
chmod o+r /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)
注意:如果您在主机 (Ubuntu Linux OS) 上遇到此问题而不是 Docker 容器,请sudo在主机终端中运行相同的命令添加到它:
sudo chmod o+r /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)
运行此命令后,请努力退出 bash 交互式终端:
exit
Run Code Online (Sandbox Code Playgroud)
然后打开一个新的 bash 交互式终端并再次运行命令:
apt-get update
apt-get install nano
export TERM=xterm
Run Code Online (Sandbox Code Playgroud)
现在一切正常。
在 Digital Ocean 上参考:Apt error: Temporary failureresolution 'deb.debian.org'
就这样。
我希望这有帮助
小智 5
也许 VM 上的网络在构建(桥接)期间未与 docker 创建的默认网络通信,因此请尝试“主机”网络:
docker build --network host -t [image_name]
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题,就我而言,这是文件访问控制。
我在 docker 根文件夹上使用了扩展 acls,但没有意识到这一点,因为它们是从上面的文件夹继承的(在“临时”目录中测试 docker 的愚蠢想法,其中权限是通过扩展 acls 设置的)。
这导致“/etc/resolv.conf”在运行的 docker 容器内设置“640”,并用“+”标记扩展 acls。但该映像没有安装扩展 acls,无法处理它。
奇怪的是,据我所知,所有其他网络工具都可以工作(例如ping),但只能apt无法访问 DNS 解析器。
从 docker root 中删除扩展的 acl 并设置常用的 acl 后,一切都在运行的容器内运行。
与“Promise Prestion”的答案类似,但也永久解决了新容器的问题。
| 归档时间: |
|
| 查看次数: |
28701 次 |
| 最近记录: |