我在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), ...
$
./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
答案 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)
遗憾的是,我们仍然无法重现这个问题。 :-(你能否尝试将一个文件/整个文件夹复制到容器内的另一个目录?例如:
我们有兴趣看看是否会导致相同的权限错误。
另外,您能否向我们提供cf ic info
的CLI输出以及您使用的CF,Docker和Docker Compose版本?
非常感谢!
非常感谢。
cf plugins(查看IBM Containers