0

目前在我工作的公司,他们有一个包含 LAMP 环境的中央开发服务器。每个开发人员都可以通过以下方式访问应用程序:developer_username.domain.com. 我们正在开发的应用程序使用许可证,并且许可证是在每个域下生成的,并且仅与域相关联,这意味着我不能使用其他开发人员的许可证。

下面的例子会给你一个想法:

developer_1.domain.com ==> license1
developer_2.domain.com ==> license2
developer_n.domain.com ==> licenseN

我正在尝试对这个环境进行 dockerize,至少将 PHP 和 Apache 放在一个容器中,并且我能够创建我需要的一切并且它可以工作。看看这个docker-compose.yml

version: '2'
services:
    php-apache:
        env_file:
          - dev_variables.env
        image: reypm/php55-dev
        build:
            context: .
            args:
                - PUID=1000
                - PGID=1000
        ports:
            - "80:80"
            - "9001:9001"
        extra_hosts:
            - "dockerhost:xxx.xxx.xxx.xxx"
        volumes:
            - ~/var/www:/var/www

这将构建我需要的东西,但是当我尝试访问服务器时出现问题,因为我正在使用http://localhost,然后许可证将不起作用,我将无法使用该应用程序。

这个想法是访问 as developer_username.domain.com,所以我的问题是:这是应该在 Dockerfile 或 Docker Compose 上完成的工作ENV/etc/hosts?运行 Docker 的主机?

4

2 回答 2

1

tl;博士

不!Docker 不会为您这样做。


长答案

您要做的是将托管docker 的机器上的自定义主机名映射到Docker compose network中的容器。正确的?

让我们退后一步,看看 docker 中的网络是如何工作的:

默认情况下,Compose 会为您的应用程序设置一个网络。服务的每个容器都加入默认网络,并且可以被该网络上的其他容器访问,并且可以通过与容器名称相同的主机名被它们发现。

此网络等于您的主机网络,如果没有明确的端口导出(对于特定容器),您将无法访问此网络。所有的暴露都是这样的

暴露的端口可以在主机上访问,并且这些端口可供任何可以访问主机的客户端使用。

从现在开始,您可以放置​​一个反向代理(如nginx),或者您可以编辑/etc/hosts以定义客户端如何访问主机(即 Docker 主机,运行 Docker compose 的机器)。

于 2016-10-13T08:27:23.867 回答
-1

主机名是在您启动容器时定义的,会覆盖您尝试放入图像中的任何内容。在高层次上,我建议混合使用自定义 docker-compose.yml 和每个开发人员的卷,但每个都运行相同的图像。docker-compose.yml 可以包含主机名和域设置。然后,文件系统上需要特定于主机名的所有其他内容以及许可证本身都应该指向卷上的文件。最后,包括一个入口点,如果新主机名以默认或空卷启动,则该入口点会执行正确的操作,使用新主机名数据填充它并提示输入许可证。

于 2016-10-13T01:40:19.697 回答