在构建域时,可以将域绑定到docker容器吗?

时间:2016-10-12 20:52:44

标签: docker docker-compose docker-networking

目前在我工作的公司,他们有一个包含LAMP环境的中央开发服务器。每个开发人员都可以访问应用程序:developer_username.domain.com。我们正在处理的应用程序使用许可证,许可证在每个域下生成,并且只与域绑定,这意味着我无法使用其他开发人员的许可证。

以下示例将为您提供一个想法:

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

我试图将这个环境至少化为至少将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,然后许可证将无法工作,我将无法使用该应用程序。 / p>

我的想法是访问developer_username.domain.com,所以我的问题是:这是一个应该在Dockerfile或Docker Compose上完成的工作我的意思是在图像/容器级别让我们说设置一个{{或许这是运行Docker的主机上ENV的工作吗?

2 个答案:

答案 0 :(得分:1)

<强> TL;博士

没有! Docker不会为你做那件事。

答案很长

您要做的是在计算机托管上将自定义主机名映射到 Docker撰写网络中的容器。正确?

让我们退一步看看docker works中的网络:

  

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

此网络等于您的主机网络,如果没有显式端口导出(对于特定容器),您将无法访问此网络。全部公开does, is that

  

主机上可以访问公开的端口,任何可以访问主机的客户端都可以使用这些端口。

从现在开始,您可以设置反向代理(如nginx),也可以编辑/etc/hosts来定义客户端如何访问主机(即Docker主机,运行Docker的机器)。 / p>

答案 1 :(得分:-1)

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