2016-06-15 118 views
0

我想知道是否我偶然发现了一个错误,或者有什么东西没有正确记录有关Windows上的变量替换与Docker机器和组合(docker的安装版本是1.11.1)。变量替换不适用于Windows 10与泊坞窗撰写

如果我运行“泊坞窗,撰写了”命令为YML文件看起来像这样:

volumes: 
- ${FOOBAR}/build/:/usr/share/nginx/html/ 

而这个变量不存在泊坞窗撰写将正确抱怨:

The foobar variable is not set. Defaulting to a blank string. 

然而,当我将其更改为现有的环境变量:

volumes: 
- ${PROJECT_DIR}/build/:/usr/share/nginx/html/ 

然后它会不亲佩尔利启动容器,并显示以下错误(试图访问nginx的容器会给你一台主机不可达报文):

ERROR: for nginx rpc error: code = 2 desc = "oci runtime error: could not synchronise with container process: not a directory" 

如果我在泊坞快速入门终端将输出正确的路径运行echo命令我已经在环境变量中设置了。如果我将$ {PROJECT_DIR}替换为环境变量值,容器将正确运行。

如果我尝试使用官方php映像而不是官方nginx映像的环境变量,我会得到相同类型的错误消息。在这两种情况下,如果我用$ {PROJECT_DIR}文本替换环境变量的内容,docker撰写文件就可以工作。

所以这是一个错误还是我错过了什么?


一些瞎我已经成功地得到容器没有错误消息的正常启动,如果我使用以下(包含完整路径本地文件)后:

volumes: 
- ${PROJECT_DIR}:/usr/share/nginx/html/ 

nginx的容器然后启动并运行,尽管它现在无法再找到这些文件。如果我用它包含它的路径替换变量,那么可以再次找到这些文件。


上述行为不一致。当我添加第二个环境变量进行替换时,它给出了oci运行时错误。当我删除第二个变量并且只在我还删除第一个变量时才再次开始工作时,请保留给它。之后,它突然接受$ {PROJECT_DIR}/build /,但仍然没有找到文件。

向nginx容器启动bash会话会显示该卷的装入点不包含任何文件。

在这里,我真的很茫然,码头工人在做什么以及它对我的期望。特别是因为我不知道它在扩展文件中的变量。

+0

嘿..你有没有试过这两种方法:'FOOBAR =/yourpath docker-compose' up,这个'export FOOBAR =/yourpath && docker-compose up'? –

+0

你能显示'PROJECT_DIR'的实际值吗? – vitr

+0

..和码头版本 – vitr

回答

1

最后得出的结论是,使用Docker Machine的Windows上的变量替换太古怪了,因为它很有用。但是,有一种替代变量替代。

如果你需要一个码头工人的环境,执行以下操作:

  1. 可以部署在不运行同一操作系统
  2. 如果主机使用本地泊坞窗或通过虚拟不在乎不同的计算机盒子(这可能需要路径变化)

那么你最好的选择是使用扩展。

首先,您将创建包含您需要的图像的docker-compose.yml文件。例如,带有MySQL的php图像:

php: 
    image: 5.5-apache 
    links: 
    - php_db:mysql 
    - maildev:maildev 
    ports: 
    - 8080:80 
php_db: 
    image: mariadb 
    ports: 
    - 3306:3306 
    environment: 
    MYSQL_ROOT_PASSWORD: examplepass 

您可能会注意到,在此docker-compose文件中没有定义任何卷。这就是我们要在一个名为泊坞窗,compose.override.yml文件中定义的东西:

php: 
    volumes: 
    - /workspaces/Eclipse/project/:/var/www/html/ 

当你在一个目录搬运工,撰写这两个文件做一些有趣的事情。它将它们合并到docker-compose.yml中的一个添加/覆盖设置与docker-compose.override.yml中的设置中。

然后,在运行命令docker-compose up时,它将导致为您正在使用的机器配置泊坞窗运行。

,如果你在你的搬运工,撰写命令改变一些事情你可以自定义文件名类似的行为:

docker-compose -f docker-compose.yml -f docker-compose.conf.yml up 

的细节是,码头工人,撰写可以接受多个撰写的文件,它会结合他们合为一体。这发生从左到右。

这两种方法都允许您创建一个基本的组合文件来配置所需的容器。然后,您可以覆盖/添加运行docker的特定计算机所需的设置。

页面Overview of docker-compose CLI有关于这些命令如何工作的更多细节。

相关问题