2014-10-28 17 views
37

Stworzyłem kilka różnych katalogów na moim komputerze-hoście, starając się dowiedzieć o Dockerze, aby moje pliki docker były uporządkowane. Mój Dockerfile właśnie uruchomiłem wygląda następująco:budowanie kontekstu dla bardzo dużego obrazu dokowanego

FROM crystal/centos 
MAINTAINER crystal 

ADD ./rpms/test.rpm ./rpms/ 
RUN yum -y --nogpgcheck localinstall /rpms/test.rpm 

Moje rzeczywiste obroty to tylko 1 GB. Ale kiedy próbuję zrobić sudo docker build -t="crystal/test" ., otrzymuję wysyłanie kontekstu kompilacji do demona Docker 3,5 GB. Czy jest coś jeszcze, czego nie jestem świadomy, kiedy nadal budujesz obrazy Docker? Czy moja pamięć gromadzi się, gdy buduję więcej obrazów w innych katalogach na komputerze-hoście?

Odpowiedz

91

Klient Docker wysyła cały "kontekst kompilacji" do demona Docker. Ten kontekst kompilacji (domyślnie) jest całym katalogiem, w którym znajduje się Dockerfile (czyli całe drzewo rpms).

Możesz ustawić plik .dockerignore, aby Docker zignorował niektóre pliki. Możesz eksperymentować z tym.

Możesz także przenieść swój katalog rpms o jeden poziom katalogowy powyżej swojego Dockerfile, a tylko dowiązanie symboliczne test.rpm do katalogu Dockerfile.

+2

Niestety wydaje się, że symlinking nie jest możliwe w tym przypadku, ponieważ 'ADD 'command nie śledzi połączeń sym podczas kompilacji. Zobacz: https://github.com/docker/docker/issues/1676 – JimmidyJoo

+2

'.dockerignore' działa doskonale dla mnie! 10x – ItayB

+0

ratownik! Programiści Rails: pamiętaj o dodaniu 'tmp'' log' do '.dockerignore' + innych niestandardowych – equivalent8

8

Naprawiłem to, przenosząc plik Dockerfile i docker-compose.yml do podfolderów i działało świetnie. Najwyraźniej doker wysyła bieżący folder do demona, a mój folder zawiera 9 gigów.

1

W moim przypadku to było kiedy wykonać z niewłaściwych -f argumentów - bez ścieżki do katalogu, w którym znajduje Dockerfile

docker build --no-cache -t nginx5 -f /home/DF/Dockerfile /home/DF/ - tuż

docker build --no-cache -t nginx5 -f /home/DF/Dockerfile - źle

0

miałem ten sam problem jako freestyler. Jednak budowałem z katalogu jednego z mojego kontekstu. Zatem argument -f był poprawny, kontekst był niepoprawny.

project 
| 
-------docker-dir 

budynku z Docker-dir dodaje było w porządku

docker build -t br_base:0.1 . 

budynku ze stacji dokującej-dir kontekst kompilacja zmianie. Dlatego musiałem zmienić kontekst w poleceniu. Kontekst jest podawany przez "." w powyższym poleceniu.

The New komenda z katalogu projektu należy

docker build -t br_base:0.1 ./base 

Kontekst tutaj jest podana przez './base'

Powiązane problemy