variablesreplace无法在Docker撰写的Windows 10上运行

我想知道是否我偶然发现了一个bug,或者有什么东西没有正确logging有关Windows上的variablesreplace与Docker机器和组合(已安装版本的docker是1.11.1)。

如果我为一个如下所示的yml文件运行“docker-compose up”命令:

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

而这个variables不存在泊坞窗撰写将正确地抱怨它:

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

但是,当我将其更改为现有的环境variables时:

 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" 

如果我在Docker Quickstart Terminal中运行echo命令,它将输出我在环境variables中设置的正确path。 如果我将$ {PROJECT_DIR}replace为环境variables值,容器将正确运行。

我得到相同types的错误消息,如果我尝试使用官方的PHP图像,而不是正式的nginx图像的环境variables。 在这两种情况下,如果我用$ {PROJECT_DIR}文本replace环境variables的内容,docker撰写文件就可以工作。

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


经过一番mu I后,如果我使用以下(包含本地文件的完整path),我设法让容器正确启动而不出现错误消息:

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

nginx容器然后启动并运行,尽pipe现在找不到文件了。 如果我用它包含的pathreplacevariables,那么可以再次find这些文件。


以上行为不一致。 当我添加第二个环境variables替代它给了oci运行时错误。 当我删除第二个variables时,保留给它,只有当我也删除第一个variables时才开始工作。 之后,它突然接受$ {PROJECT_DIR} / build /,但仍然没有find文件。

对nginx容器启动一个bash会话表明该卷的挂载点不包含任何文件。

在这里,我真的感到茫然,docker正在做什么以及期望从我这里得到什么。 特别是因为我不知道什么是扩大撰写文件中的variables。

最后得出的结论是,使用Docker Machine的Windowsvariablesreplace太古怪了。 但是,有一个替代variables替代。

如果你需要一个docker环境,可以执行以下操作:

  1. 可以部署在不运行相同操作系统的不同计算机上
  2. 不关心主机本地或通过Virtual Box使用Docker(这可能需要path更改)

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

首先创build一个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文件中没有定义任何卷。 这是我们要在一个名为docker-compose.override.yml的文件中定义的:

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

当你在一个目录中有两个文件时,docker-compose会做一些有趣的事情。 它将它们组合成docker-compose.yml中的一个添加/覆盖设置,其中包含docker-compose.override.yml中的设置。

然后,当运行命令docker-compose up ,会导致为您正在使用的计算机configuration的docker运行。

如果在docker-compose命令中更改了一些内容,可以使用自定义文件名获得类似的行为:

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

详细的是docker-compose可以接受多个撰写文件,并将它们合并为一个。 这发生从左到右。

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

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