无法复制到Bluemix容器卷

时间:2016-10-07 11:11:57

标签: containers ibm-cloud

我在django-cms文件共享中创建了卷:

$ cf ic volume fs-list
Name                                   Size   IOPS/GB   Created               State   
8194062f-916d-49fa-8ae1-91ce92f5752a   20     4.00      2016-07-27 07:00:56   READY   
django-cms                             20     2.00      2016-10-06 17:21:26   READY   

$ cf ic volume list
django-cms-app-vol
django-cms-postgres-vol

该卷通过此撰写文件与容器djangocmsdocker_nginx_1相关联,并通过djangocmsdocker_nginx_1可以访问/usr/src/app以下的事实得到确认

web:
  restart: always
  build: ./web
  # Expose ports without publishing them to the host machine 
  expose:
    - "8000"
  links:
    - postgres:postgres 
  env_file: .env
  volumes:
    - ./web:/usr/src/app
  command: /usr/local/bin/gunicorn mycms.wsgi:application -w 2 -b :8000

nginx:
  restart: always
  build: ./nginx/
  ports:
    - "80:80"
  volumes_from:
    - web
  links:
    - web:web

postgres:
  restart: always
  image: postgres:latest
  volumes:
    - /var/lib/postgresql
  ports:
    - "5432:5432" 

所以这就是我想要做的但是Bluemix无法创建目标目录结构...... Bluemix cf ic中是否存在错误或者我做错了什么?

$ docker cp -L ./web/mycms djangocmsdocker_nginx_1:/usr/src/app/mycms
Error response from daemon: Error processing tar file(exit status 1): mkdir /mycms: permission denied

(BTW ./web/mycms中没有tar文件)

我尝试了几件不同的事情:

我看着容器。一切看起来还不错但我chmod以防万一有权限问题。现在我有:

$ cf ic exec -it djangocmsdocker_nginx_1 bash
root@instance-0090e170:/# cd /usr/src/app                                                                                                            
root@instance-0090e170:/usr/src/app# mkdir mycms
root@instance-0090e170:/usr/src/app# mkdir static
root@instance-0090e170:/usr/src/app# ls -la
total 16
drwxrwxrwx 4 root root 4096 Oct  6 19:09 .
drwxr-xr-x 3 root root 4096 Oct  6 18:35 ..
drwxr-xr-x 2 root root 4096 Oct  6 19:09 mycms
drwxr-xr-x 2 root root 4096 Oct  6 19:09 static
root@instance-0090e170:/usr/src/app# exit
exit

但我仍然无法写入音量。这是怎么回事?

$ docker cp -L ./web/mycms/ djangocmsdocker_nginx_1:/usr/src/app/mycms/
Error response from daemon: Error processing tar file(exit status 1): mkdir /mycms: permission denied

更多信息

我登录Bluemix,Docker配置为Bluemix容器,如下所示:

$ env | grep DOCKER
DOCKER_HOST=tcp://containers-api.eu-gb.bluemix.net:8443
DOCKER_TLS_VERIFY=1
DOCKER_CERT_PATH=/Users/iainhouston/.ice/certs/containers-api.eu-gb.bluemix.net/8194062f-...

请注意,cf ic cp出现同样的错误。

我拥有正在复制的目录的正确权限。 (即使报告的错误显然是Bluemix的Docker服务器无法在tar文件中创建一个目录....)

$ ls -la ./web
total 472
drwxr-xr-x   9 iainhouston  staff     306  4 Oct 10:14 .
drwxr-xr-x  11 iainhouston  staff     374  1 Oct 22:36 ..
-rw-r--r--   1 iainhouston  staff     210  6 Oct 10:17 Dockerfile
-rwxr-xr-x   1 iainhouston  staff     248 23 Sep 21:11 manage.py
drwxr-xr-x   2 iainhouston  staff      68 23 Sep 21:11 media
drwxr-xr-x   9 iainhouston  staff     306 23 Sep 21:11 mycms
-rw-r--r--   1 iainhouston  staff  228352  4 Oct 10:14 project.db
-rw-r--r--   1 iainhouston  staff     694 23 Sep 23:39 requirements.txt
drwxr-xr-x  12 iainhouston  staff     408 29 Sep 10:26 static

$ docker cp -L ./web djangocmsdocker_nginx_1:/usr/src/app
Error response from daemon: Error processing tar file(exit status 1): mkdir /web: permission denied

$ id
uid=501(iainhouston) gid=20(staff) groups=20(staff), ...
$

Dockerfiles

./web/Dockerfile

FROM python:3.5

ENV BUILD_TIMESTAMP 2016-10-06T:10:15

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt

COPY . /usr/src/app

./nginx/Dockerfile

FROM tutum/nginx
RUN rm /etc/nginx/sites-enabled/default
ADD sites-enabled/ /etc/nginx/sites-enabled

3 个答案:

答案 0 :(得分:0)

你可以在你要复制到容器卷的本地目录(mycms)上执行ls -la,然后检索创建它的用户的实际ID吗?可能是本地目录是使用超出容器内可接受范围的用户ID创建的,因此无法映射。

此外,我注意到您使用的是docker cp而不是cf ic cp。为了确保,您是否在登录IBM Container服务时配置CLI以运行本机Docker命令?如果没有,请尝试使用cf ic cp。

由于

答案 1 :(得分:0)

尝试重现这一点,我有点困惑。我无法得到你所看到的错误,试图找出原因。

首先,一些解释:错误是抱怨TAR文件,因为docker cp如何在幕后工作 - 它将源文件/目录复制,将其复制,然后解压缩目的地。

现在,它给出的错误在这里显得很重要。这两个错误都在抱怨试图创建一个目录,而不是关闭/ usr / src / app。我认为那里可能存在链接,但无法在我的测试中重现失败。

本地用户ID似乎不是问题(我为我的测试创建了一个与您匹配的本地用户ID /组,它没有问题)。我在cf ic exec内看到你以root身份运行 - 运行的容器内的app是什么ID? (基本上,你的Dockerfile中有一个USER指令)

答案 2 :(得分:0)

遗憾的是,我们仍然无法重现这个问题。 :-(你能否尝试将一个文件/整个文件夹复制到容器内的另一个目录?例如:

  1. / usr / src目录
  2. / usr / src / app / tmp(您可能需要先创建tmp文件夹)
  3. / var / tmp中
  4. 我们有兴趣看看是否会导致相同的权限错误。

    另外,您能否向我们提供cf ic info的CLI输出以及您使用的CF,Docker和Docker Compose版本? 非常感谢! 非常感谢。 cf plugins(查看IBM Containers