【问题标题】:apache docker container communicate with rstudio containerapache docker 容器与 rstudio 容器通信
【发布时间】:2018-06-21 04:25:30
【问题描述】:

我最近一直在玩 docker 和 apache,这两个我都不太了解。

我有一个关于同一主机上的 2 个 docker 容器之间的通信的问题。

一个容器正在运行带有选项 -p 80:80 的 apache。 转到 localhost:80 显示默认的 apache 页面

我有第二个容器运行带有选项 -p 8787:8787 的摇杆/rstudio 映像。 转到 localhost:8787 会按预期显示 rstudio 登录页面。

我想在我的 apache 容器中进行设置,以便 localhost/rstudio 将我带到在摇杆容器中运行的 rstudio 的登录页面。

据我了解,apache 容器应该能够看到 localhost:8787,在可用站点下我有以下 rstudio.conf 文件

<VirtualHost *:80>

  <Proxy *>
    Allow from localhost
  </Proxy>

  # Specify path for Logs
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
  RewriteEngine on

  # Following lines should open rstudio directly from the url
  # Map rstudio to rstudio/
  RedirectMatch ^/rstudio$ /rstudio/

  RewriteCond %{HTTP:Upgrade} =websocket
  RewriteRule /rstudio/(.*) ws://localhost:8787/$1 [P,L]
  RewriteCond %{HTTP:Upgrade}     !=websocket
  RewriteRule /rstudio/(.*) http://localhost:8787/$1 [P,L]
  ProxyPass /rstudio/     http://localhost:8787/
  ProxyPassReverse /rstudio/ http://localhost:8787/
  ProxyRequests off
</VirtualHost>

按照 rstudio 服务器配置文档的建议。但是 localhost:80/rstudio 返回 404,我不明白为什么。有人对如何解决这个问题有任何建议吗?

我想从 apache 容器内部执行此操作而不是仅在 Rocker 容器中安装 apache 的主要原因是 apache 容器也可以管理其他连接的容器。

【问题讨论】:

    标签: apache docker rstudio-server


    【解决方案1】:

    据我了解,apache 容器应该能够看到 localhost:8787,在可用站点下我有以下 rstudio.conf 文件

    几乎。从 apache docker 容器内部,localhost 是 那个容器,而不是主机。

    如果您想了解我在说什么,请进入您正在运行的 apache 容器和curl localhost:8787。你会得到一个 404。现在在 apache 容器中为 8787 添加另一个 vhost 并启用它,然后再次从容器内部 curl localhost:8787,你将获得新 vhost 的内容。

    完成您所要求的两个最直接的选择是自定义网络或使用 docker-compose。

    自定义网络

    docker network create jamie-rowan-network
    docker run -itd -p 80:80  --network jamie-rowan-network --name apache <image>
    docker run -itd -p 8787:8787 --network jamie-rowan-network --name rstudio <image>
    

    这将创建一个名为 jamie-rowan-network 的 bridge 网络。运行容器时,将它们添加到此网络。嵌入式网络 DNS 还具有服务发现功能,因此您的容器将能够通过运行中给出的 --name 相互解析。 (建议阅读here

    现在您应该可以使用curl rstudio:8787 从您的 apache 容器中解析您的 rstudio 容器。

    重要提示:这种行为在 Docker 1.10 前后略有不同,请务必查看我上面链接的文档。我假设你的版本 > 1.10。

    docker-compose

    docker-compose 是一个旨在简化容器编排的工具。在这种情况下,它几乎可以自行完成自定义网络所需的所有提升,而您无需进行任何工作。我不会详细介绍如何编写 docker-compose.yml,但 docker-compose.yml 中列出的任何服务都可以通过名称由其他服务访问。

    例子:

    version: '3'
    services:
      apache:
        image: <image>
        ports:
          - 80:80
      rstudio:
        image: <image>
        ports:
          - 8787:8787
    

    这将完成与自定义网络相同的操作; rstudio 可以使用curl rstudio:8787 从apache 容器访问,反之,apache 可以使用curl apache:80 从rstudio 访问

    【讨论】:

    • 感谢您的快速回答。我也一直在搞乱撰写。没有意识到它也建立了一个网络结构。我现在很喜欢,但很快就会尝试你的答案。
    • 好的,所以我修改了我的 docker-compose 使其看起来与上面类似。我确实可以附加到 apache 容器和 curl rstudio:8787 并得到响应(不支持的浏览器,但不是什么都没有)。这会让我觉得在 rstudio.conf 中 localhost:8787 被替换为 rstudio:8787 然后 localhost:80/rstudio 在网络浏览器中应该显示我想要的,但我仍然得到 404。我错过了什么吗?
    • 我会怀疑 rstudio.conf 或 httpd 中的某些内容。你确定 httpd 正在接收你的 conf 文件吗?
    猜你喜欢
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    相关资源
    最近更新 更多