mirror of https://github.com/docker/docker-py.git
Support absolute paths for in-context Dockerfiles
Signed-off-by: Joffrey F <joffrey@docker.com>
This commit is contained in:
parent
298b7e1474
commit
33cae41d90
|
|
@ -332,10 +332,12 @@ def process_dockerfile(dockerfile, path):
|
||||||
|
|
||||||
if (os.path.splitdrive(path)[0] != os.path.splitdrive(abs_dockerfile)[0] or
|
if (os.path.splitdrive(path)[0] != os.path.splitdrive(abs_dockerfile)[0] or
|
||||||
os.path.relpath(abs_dockerfile, path).startswith('..')):
|
os.path.relpath(abs_dockerfile, path).startswith('..')):
|
||||||
|
# Dockerfile not in context - read data to insert into tar later
|
||||||
with open(abs_dockerfile, 'r') as df:
|
with open(abs_dockerfile, 'r') as df:
|
||||||
return (
|
return (
|
||||||
'.dockerfile.{0:x}'.format(random.getrandbits(160)),
|
'.dockerfile.{0:x}'.format(random.getrandbits(160)),
|
||||||
df.read()
|
df.read()
|
||||||
)
|
)
|
||||||
else:
|
|
||||||
return (dockerfile, None)
|
# Dockerfile is inside the context - return path relative to context root
|
||||||
|
return (os.path.relpath(abs_dockerfile, path), None)
|
||||||
|
|
|
||||||
6
setup.py
6
setup.py
|
|
@ -9,12 +9,16 @@ import pip
|
||||||
|
|
||||||
from setuptools import setup, find_packages
|
from setuptools import setup, find_packages
|
||||||
|
|
||||||
if 'docker-py' in [x.project_name for x in pip.get_installed_distributions()]:
|
try:
|
||||||
|
if 'docker-py' in [
|
||||||
|
x.project_name for x in pip.get_installed_distributions()]:
|
||||||
print(
|
print(
|
||||||
'ERROR: "docker-py" needs to be uninstalled before installing this'
|
'ERROR: "docker-py" needs to be uninstalled before installing this'
|
||||||
' package:\npip uninstall docker-py', file=sys.stderr
|
' package:\npip uninstall docker-py', file=sys.stderr
|
||||||
)
|
)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
|
||||||
ROOT_DIR = os.path.dirname(__file__)
|
ROOT_DIR = os.path.dirname(__file__)
|
||||||
SOURCE_DIR = os.path.join(ROOT_DIR)
|
SOURCE_DIR = os.path.join(ROOT_DIR)
|
||||||
|
|
|
||||||
|
|
@ -452,7 +452,6 @@ class BuildTest(BaseAPIIntegrationTest):
|
||||||
'COPY . /src',
|
'COPY . /src',
|
||||||
'WORKDIR /src',
|
'WORKDIR /src',
|
||||||
]))
|
]))
|
||||||
print(os.path.join(base_dir, 'custom.dockerfile'))
|
|
||||||
img_name = random_name()
|
img_name = random_name()
|
||||||
self.tmp_imgs.append(img_name)
|
self.tmp_imgs.append(img_name)
|
||||||
stream = self.client.build(
|
stream = self.client.build(
|
||||||
|
|
@ -472,3 +471,35 @@ class BuildTest(BaseAPIIntegrationTest):
|
||||||
assert sorted(
|
assert sorted(
|
||||||
[b'.', b'..', b'file.txt', b'custom.dockerfile']
|
[b'.', b'..', b'file.txt', b'custom.dockerfile']
|
||||||
) == sorted(lsdata)
|
) == sorted(lsdata)
|
||||||
|
|
||||||
|
def test_build_in_context_abs_dockerfile(self):
|
||||||
|
base_dir = tempfile.mkdtemp()
|
||||||
|
self.addCleanup(shutil.rmtree, base_dir)
|
||||||
|
abs_dockerfile_path = os.path.join(base_dir, 'custom.dockerfile')
|
||||||
|
with open(os.path.join(base_dir, 'file.txt'), 'w') as f:
|
||||||
|
f.write('hello world')
|
||||||
|
with open(abs_dockerfile_path, 'w') as df:
|
||||||
|
df.write('\n'.join([
|
||||||
|
'FROM busybox',
|
||||||
|
'COPY . /src',
|
||||||
|
'WORKDIR /src',
|
||||||
|
]))
|
||||||
|
img_name = random_name()
|
||||||
|
self.tmp_imgs.append(img_name)
|
||||||
|
stream = self.client.build(
|
||||||
|
path=base_dir, dockerfile=abs_dockerfile_path, tag=img_name,
|
||||||
|
decode=True
|
||||||
|
)
|
||||||
|
lines = []
|
||||||
|
for chunk in stream:
|
||||||
|
lines.append(chunk)
|
||||||
|
assert 'Successfully tagged' in lines[-1]['stream']
|
||||||
|
|
||||||
|
ctnr = self.client.create_container(img_name, 'ls -a')
|
||||||
|
self.tmp_containers.append(ctnr)
|
||||||
|
self.client.start(ctnr)
|
||||||
|
lsdata = self.client.logs(ctnr).strip().split(b'\n')
|
||||||
|
assert len(lsdata) == 4
|
||||||
|
assert sorted(
|
||||||
|
[b'.', b'..', b'file.txt', b'custom.dockerfile']
|
||||||
|
) == sorted(lsdata)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue