【问题标题】:Sharing app files between phpfpm and nginx in docker containers在 docker 容器中的 phpfpm 和 nginx 之间共享应用程序文件
【发布时间】:2018-04-22 11:55:37
【问题描述】:

我正在尝试将简单的 phpinfo.php 部署到 ECS(Amazon EC2 容器服务)。

有人告诉我,如果我 Dockerize 我的应用程序并将生成的映像推送到 Amazon ECR(弹性容器注册表),EC2 可以轻松地从那里获取应用程序。

我做到了,现在我遇到了另一个障碍。

在 EC2 容器中部署后,问题是我的应用程序仅位于文件夹 /var/www/html/ 中的 phpfpm 容器中,但在我的 nginx中不可见> 容器。

由于这个问题,nginx 没有交付我的应用程序。

请注意,app不在主机EC2中,也不在nginx中,只在php-fpm中。如何解决这个问题呢?请指教。谢谢

docker-compose.yml

version: '2'

services:
  nginx:
      image: 607167.dkr.ecr.ap-southeast-1.amazonaws.com/nginx:1
      cpu_shares: 50
      mem_limit: 134217728
      ports:
          - "80:80"
      links:
          - phpfpm
  phpfpm:
      image: 60547.dkr.ecr.ap-southeast-1.amazonaws.com/phpinfo:latest
      cpu_shares: 50
      mem_limit: 134217728
      ports:
          - "9000:9000"
          - "3306:3306"

我尝试将此行添加到 yml 文件中的两个容器中,但是我的容器无法加载。

  volumes:
      - .:/var/www/html

请帮忙。谢谢

【问题讨论】:

  • 它是在本地工作的东西吗?在您的机器上,不涉及任何 EC2 概念?要使用 aws cli 客户端访问 ECR 上的容器,请使用 aws ecr get-login
  • @arvymetal 这一切都在 EC2 实例中工作。 2 个容器在 EC2 实例内
  • 事实上,我并不真正了解您显示的docker-compose.yml 文件与ECS 之间的关系。 ECS 依赖于任务定义...
  • 另外,很抱歉造成混淆,但我不明白您的评论是否意味着 2 个容器在 EC2 实例中正常工作,或者只是它们在其中运行......在这种情况下,我建议您在本地重现该问题。
  • 最后一条评论:在容器中安装卷会覆盖该位置容器中的内容。容器可以通过共享一个内容在主机上的卷进行通信,也可以通过套接字进行通信,但是一个容器不能访问另一个容器的文件系统……顺便说一下,我还容器化了一个 PHP 服务器,这很痛苦。最好将 PHP-FPM 和 NGINX 放在一起。但是我不明白为什么我在这里看到端口 3306... 如果数据库在这里,它应该被分隔到另一个容器中。

标签: php amazon-web-services docker amazon-ec2


【解决方案1】:

我想发布此答案,希望对其他人有所帮助。 我花了一天时间试图弄清楚如何解决这种情况,但解决方案非常简单。

不要使用两个单独的容器 ONE FOR php 和 ONE FOR nginx,而是使用 PHPNGINX 和您的应用

将 docker 容器视为单个 linux vm 实例。单个 vm 可以运行多个服务,单个 docker 容器也可以。每个服务不必位于不同的容器中。

如果概念清晰,答案很容易。不幸的是,我的不是。

希望对你有帮助。

【讨论】:

  • 好的,所以你把这两个部分分组了。这是正确的做法。是的,docker 使用起来很简单,但是需要一些时间来理解它的理念,主要是它不是像 Vagrant 这样的 VM 配置器......容器确实不是应该只运行一个进程,但只服务一个目的。在这种特定情况下,PHP-FPM 可以被视为 Web 服务器的依赖项。我不会说容器应该被视为一个单个linux VM实例,而是一个单个应用程序(嵌入它的所有依赖项,包括Linux)。
  • 我有两个问题:如何在同一个 docker 镜像中运行两个服务?你对那些认为“一项服务=一张图片”的人说什么?
  • 您必须构建一个 Docker 映像才能拥有多个服务。将 docker 视为虚拟机。因此,如果您在单个 docker 映像中构建 Node.js 和 Golang,它将同时运行。我希望它能解释。
猜你喜欢
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多