我已遵循此处的所有文档:https ://cloud.google.com/container-optimized-os/docs/尝试将使用现已弃用的 container-vm 映像的现有配置升级到新配置使用容器优化的操作系统。但没有任何效果!我无法让 Docker 容器绑定到端口 80(即 -p 80:80),而且我的 Docker 容器似乎也无法写入 /var/run/nginx.pid(是的,我在我的 Docker 容器)。我按照说明禁用了 AppArmour,并且还尝试为 nginx 创建 AppArmour 配置文件。没有任何作用!他们是否有任何使用容器优化操作系统的示例,这些操作系统不只是使用busybox图像并打印“Hello World”或睡眠!一个打开端口并写入文件系统的示例怎么样?
2 回答
我刚刚在 Container Optimized OS 上安装了Apache Guacamole,它就像一个魅力。对于安全性有一些限制。
根文件系统 ("/") 以只读方式挂载,其中的某些部分重新挂载为可写,如下所示:
/tmp、/run、/media、/mnt/disks 和 /var/lib/cloud 都使用 tmpfs 挂载,虽然它们是可写的,但它们的内容在重新启动之间不会保留。
目录 /mnt/stateful_partition、/var 和 /home 是从有状态磁盘分区挂载的,这意味着这些位置可用于存储在重新启动后仍然存在的数据。例如,Docker 的工作目录 /var/lib/docker 在重启后是有状态的。
- 在可写位置中,只有 /var/lib/docker 和 /var/lib/cloud 被挂载为“可执行文件”(即没有 noexec 挂载标志)。
如果您需要接受来自任何源 IP地址的 HTTP(端口 80)连接,请在您的 Container-Optimzied OS 实例上运行以下命令:
sudo iptables -w -A INPUT -p tcp --dport 80 -j ACCEPT
一般来说,建议您通过 cloud-init 将主机防火墙配置为 systemd 服务。
PS:Container-Optimized OS 可以自动更新。此机制可用于更新一组 Compute Engine 实例。
我无法让 Docker 容器绑定到端口 80(即 -p 80:80),而且我的 Docker 容器似乎也无法写入 /var/run/nginx.pid(是的,我在我的 Docker 容器)。
我认为您可能遇到了一些 GCE 防火墙问题。最好的方法是逐步验证/调试它:
尝试运行一个非常简单的 nginx 容器:“-d”要求 Docker 以守护程序模式运行它,“-p 80:80”映射 HTTP 端口,“--name nginx-hello”将容器名称映射到 nginx-hello。
docker run -d --name nginx-hello -p 80:80 nginx
(可选)验证容器是否正确运行:您应该看到列出的“nginx-hello”容器。
docker ps
验证 nginx 是否在本地工作:您应该会看到良好的 HTTP 响应。
curl localhost:80
如果您能够正确验证上述所有步骤,那么您可能会遇到 GCE 防火墙问题: