0

我已遵循此处的所有文档: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”或睡眠!一个打开端口并写入文件系统的示例怎么样?

4

2 回答 2

3

我刚刚在 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 实例。

于 2017-11-01T20:22:02.917 回答
1

我无法让 Docker 容器绑定到端口 80(即 -p 80:80),而且我的 Docker 容器似乎也无法写入 /var/run/nginx.pid(是的,我在我的 Docker 容器)。

我认为您可能遇到了一些 GCE 防火墙问题。最好的方法是逐步验证/调试它:

  1. 尝试运行一个非常简单的 nginx 容器:“-d”要求 Docker 以守护程序模式运行它,“-p 80:80”映射 HTTP 端口,“--name nginx-hello”将容器名称映射到 nginx-hello。

    docker run -d --name nginx-hello -p 80:80 nginx
    
  2. (可选)验证容器是否正确运行:您应该看到列出的“nginx-hello”容器。

    docker ps
    
  3. 验证 nginx 是否在本地工作:您应该会看到良好的 HTTP 响应。

    curl localhost:80
    

如果您能够正确验证上述所有步骤,那么您可能会遇到 GCE 防火墙问题:

如何为 GCE 实例模板启用 http 流量?

于 2019-11-06T00:53:41.990 回答