diff options
| author | Joffrey F <f.joffrey@gmail.com> | 2017-01-25 12:37:46 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-01-25 12:37:46 -0800 |
| commit | ff83cf406d7dd5d88367aea661cb3dd2a1419f7c (patch) | |
| tree | 4e9f47fe635098e687b9b3946278ca6ec0a8069c | |
| parent | 8ca5b2b392ad5625dc726b8ae43f866196ba40df (diff) | |
| parent | 93877241f9c4d25967e41b050a1fe2966355ede5 (diff) | |
| download | docker-py-ff83cf406d7dd5d88367aea661cb3dd2a1419f7c.tar.gz | |
Merge pull request #1408 from docker/1407-tar-ignore-sockets
Ignore socket files in utils.tar
| -rw-r--r-- | Makefile | 4 | ||||
| -rw-r--r-- | docker/errors.py | 2 | ||||
| -rw-r--r-- | docker/utils/utils.py | 9 | ||||
| -rw-r--r-- | tests/unit/utils_test.py | 15 |
4 files changed, 25 insertions, 5 deletions
@@ -44,7 +44,7 @@ integration-test-py3: build-py3 .PHONY: integration-dind integration-dind: build build-py3 docker rm -vf dpy-dind || : - docker run -d --name dpy-dind --privileged dockerswarm/dind:1.13.0-rc3 docker daemon\ + docker run -d --name dpy-dind --privileged dockerswarm/dind:1.13.0 docker daemon\ -H tcp://0.0.0.0:2375 docker run --rm --env="DOCKER_HOST=tcp://docker:2375" --link=dpy-dind:docker docker-sdk-python\ py.test tests/integration @@ -57,7 +57,7 @@ integration-dind-ssl: build-dind-certs build build-py3 docker run -d --name dpy-dind-certs dpy-dind-certs docker run -d --env="DOCKER_HOST=tcp://localhost:2375" --env="DOCKER_TLS_VERIFY=1"\ --env="DOCKER_CERT_PATH=/certs" --volumes-from dpy-dind-certs --name dpy-dind-ssl\ - -v /tmp --privileged dockerswarm/dind:1.13.0-rc3 docker daemon --tlsverify\ + -v /tmp --privileged dockerswarm/dind:1.13.0 docker daemon --tlsverify\ --tlscacert=/certs/ca.pem --tlscert=/certs/server-cert.pem\ --tlskey=/certs/server-key.pem -H tcp://0.0.0.0:2375 docker run --rm --volumes-from dpy-dind-ssl --env="DOCKER_HOST=tcp://docker:2375"\ diff --git a/docker/errors.py b/docker/errors.py index 95c462b..d9b197d 100644 --- a/docker/errors.py +++ b/docker/errors.py @@ -22,7 +22,7 @@ def create_api_error_from_http_exception(e): cls = APIError if response.status_code == 404: if explanation and ('No such image' in str(explanation) or - 'not found: does not exist or no read access' + 'not found: does not exist or no pull access' in str(explanation)): cls = ImageNotFound else: diff --git a/docker/utils/utils.py b/docker/utils/utils.py index e12fcf0..8026c4d 100644 --- a/docker/utils/utils.py +++ b/docker/utils/utils.py @@ -4,7 +4,6 @@ import os import os.path import json import shlex -import sys import tarfile import tempfile import warnings @@ -15,6 +14,7 @@ from fnmatch import fnmatch import requests import six +from .. import constants from .. import errors from .. import tls @@ -90,7 +90,12 @@ def tar(path, exclude=None, dockerfile=None, fileobj=None, gzip=False): for path in sorted(exclude_paths(root, exclude, dockerfile=dockerfile)): i = t.gettarinfo(os.path.join(root, path), arcname=path) - if sys.platform == 'win32': + if i is None: + # This happens when we encounter a socket file. We can safely + # ignore it and proceed. + continue + + if constants.IS_WINDOWS_PLATFORM: # Windows doesn't keep track of the execute bit, so we make files # and directories executable by default. i.mode = i.mode & 0o755 | 0o111 diff --git a/tests/unit/utils_test.py b/tests/unit/utils_test.py index cf00616..71a8cc7 100644 --- a/tests/unit/utils_test.py +++ b/tests/unit/utils_test.py @@ -5,6 +5,7 @@ import json import os import os.path import shutil +import socket import sys import tarfile import tempfile @@ -894,6 +895,20 @@ class TarTest(unittest.TestCase): sorted(tar_data.getnames()), ['bar', 'bar/foo', 'foo'] ) + def test_tar_socket_file(self): + base = tempfile.mkdtemp() + self.addCleanup(shutil.rmtree, base) + for d in ['foo', 'bar']: + os.makedirs(os.path.join(base, d)) + sock = socket.socket(socket.AF_UNIX) + self.addCleanup(sock.close) + sock.bind(os.path.join(base, 'test.sock')) + with tar(base) as archive: + tar_data = tarfile.open(fileobj=archive) + self.assertEqual( + sorted(tar_data.getnames()), ['bar', 'foo'] + ) + class ShouldCheckDirectoryTest(unittest.TestCase): exclude_patterns = [ |
