我已按照此处的所有文档:https://cloud.google.com/container-optimized-os/docs/尝试将使用现已弃用的container-vm映像的现有配置升级到使用容器优化操作系统的新配置。但没有任何作用!我无法将Docker容器绑定到端口80(即-p 80:80),而且我的Docker容器似乎无法写入/var/run/nginx.pid(是的我正在使用nginx我的Docker容器)。我按照说明禁用AppArmour,我也尝试为nginx创建AppArmour配置文件。什么都行不通!他们是否使用容器优化的操作系统,不仅使用busybox图像并打印“Hello World”或睡眠!打开端口并写入文件系统的示例怎么样?
答案 0 :(得分:3)
我刚刚在Container Optimized OS上安装了Apache Guacamole,它就像魅力一样。有some constraints in place for security。
根文件系统(" /")以只读方式挂载,其中某些部分重新挂载为可写,如下所示:
/ tmp,/ run,/ media,/ mnt / disks和/ var / lib / cloud都已挂载 使用tmpfs,虽然它们是可写的,但它们的内容却不是 在重新启动之间保留。
目录/ mnt / stateful_partition,/ var 和/ home从有状态磁盘分区挂载,这意味着 这些位置可用于存储持续存在的数据 重新启动。例如,Docker的工作目录/ var / lib / docker是 重新启动时有状态。
If you need to accept HTTP (port 80) connections from any source IP地址,在Container-Optimzied OS实例上运行以下命令:
sudo iptables -w -A INPUT -p tcp --dport 80 -j ACCEPT
通常,建议您通过cloud-init将主机防火墙配置为systemd服务。
PS:容器优化的操作系统能够自动更新。此机制可用于更新一组计算引擎实例。
答案 1 :(得分:1)
我无法将Docker容器绑定到端口80(即-p 80:80),而且我的Docker容器似乎无法写入/var/run/nginx.pid(是的,在我的Docker容器中使用nginx)。
我认为您可能遇到了某些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防火墙问题: