도커: 상위 디렉토리에서 파일 추가
내 안에서Dockerfile
제가 가지고 있는 것은:
ADD ../../myapp.war /opt/tomcat7/webapps/
해당 파일은 다음과 같이 존재합니다.ls ../../myapp.war
올바른 파일을 반환하지만 실행하면sudo docker build -t myapp .
제가 가지고 있는 것은:
Step 1 : ADD ../../myapp.war /opt/tomcat7/webapps/
2014/07/02 19:18:09 ../../myapp.war: no such file or directory
왜 그리고 어떻게 그것을 정확하게 하는지 아는 사람이 있습니까?
cd
대신 상위 디렉토리로 이동- 도커 파일의 경로를 지정하여 상위 디렉토리에서 이미지 작성
docker build -t <some tag> -f <dir/dir/Dockerfile> .
이 경우 도커의 컨텍스트가 상위 디렉토리로 전환되고 ADD 및 COPY에 액세스할 수 있습니다.
도커 합성을 사용하여 컨텍스트 폴더를 설정할 수 있습니다.
# docker-compose.yml
version: '3.3'
services:
yourservice:
build:
context: ./
dockerfile: ./docker/yourservice/Dockerfile
유감스럽게도 (실제적이고 보안상의 이유로) 로컬 콘텐츠를 추가/복사하려면 디렉토리 트리의 동일한 수준에 있어야 합니다.Dockerfile
.
설명서에서 다음을 참조하십시오.
<src> 경로는 빌드의 컨텍스트 내에 있어야 합니다. 도커 빌드의 첫 번째 단계는 컨텍스트 디렉터리(및 하위 디렉터리)를 도커 데몬으로 보내는 것이기 때문에 ../something/something을 추가할 수 없습니다.
편집: 이제 옵션이 있습니다(-f
Docker 파일의 경로를 설정하려면 @Boedy의 응답을 참조하십시오.
승인된 답변을 지원하기 위해 일부 코드 조각을 추가하는 중입니다.
디렉토리 구조:
setup/
|__docker/DockerFile
|__target/scripts/<myscripts.sh>
src/
|__<my source files>
도커 파일 항목:
RUN mkdir -p /home/vagrant/dockerws/chatServerInstaller/scripts/
RUN mkdir -p /home/vagrant/dockerws/chatServerInstaller/src/
WORKDIR /home/vagrant/dockerws/chatServerInstaller
#Copy all the required files from host's file system to the container file system.
COPY setup/target/scripts/install_x.sh scripts/
COPY setup/target/scripts/install_y.sh scripts/
COPY src/ src/
도커 이미지를 구축하는 데 사용되는 명령어
docker build -t test:latest -f setup/docker/Dockerfile .
부터-f
다른 문제를 일으켰고, 다른 해결책을 개발했습니다.
- 상위 폴더에 기본 이미지 만들기
- 필요한 파일을 추가했습니다.
- 이 이미지를 하위 폴더에 있는 프로젝트의 기본 이미지로 사용합니다.
그-f
플래그는 나의 문제를 해결하지 못합니다. 왜냐하면 나의 문제이기 때문입니다.onbuild
image는 폴더에서 파일을 찾고 다음과 같이 호출해야 했습니다.
-f foo/bar/Dockerfile foo/bar
대신에
-f foo/bar/Dockerfile .
또한 이 방법은 일부 경우에만 사용할 수 있습니다.-f
깃발
다음 설정이 지정된 경우:
+ parent
+ service1
- some_file.json
+ service2
- Dockerfile
도커 파일이 있는 경우service2
그리고 복사하기를 원합니다.some_file.json
부터service1
service2 디렉토리 내에서 실행할 수 있습니다.
docker build -t my_image ../ --file Dockerfile
이렇게 하면 대상 컨텍스트가 한 단계 위로 설정됩니다.여기서 까다로운 부분은 대상 도커 파일이 대상 컨텍스트에 없기 때문에 명시적으로 설정된다는 것입니다.
인service2/Dockerfile
당신은 발행해야 합니다.COPY
파일이 한 수준 위에 있는 것처럼 명령합니다.
COPY service1/some_file.json /target/location/some_file.json
대신에
COPY ../service1/some_file.json /target/location/some_file.json # will not work
다음과 같은 디렉터리 트리가 있다고 가정해 보겠습니다.
dir0
├───dir1
│ └───dir11
| | └───dockerfile
| └───dir12 (current)
└───dir2 (content to be copied)
도커 파일은 다음과 같습니다.
FROM baseImage
COPY / /content
다음을 사용하여 dir2 컨텐츠를 새 도커 이미지로 복사하려고 합니다.COPY
또는ADD
dir11에 있고 현재 디렉토리는 dir12인 도커 파일의
이미지를 올바르게 빌드하려면 다음 명령을 실행해야 합니다.
docker build -t image-name:tag -f ../dir11/dockerfile ../../dir2
-t your-image-name
' 및 사항은 'name:tag' 형식의 입니다.-f ../dir11/dockerfile
도커 파일의 이름(기본값은 'PATH/도커 파일')../../dir2
COPY 또는 ADD 명령에 대해 최신 상태가 될 경로
갱신하다
이것을 실수로 실행한다고 가정해 보겠습니다.
docker build -t image-name:tag -f ../dir11/dockerfile ../../
이것은 당신의 문제를 해결하지 못할 것입니다. 왜냐하면 이 경우에는COPY / /content
dir0 컨텐츠(dir1 및 dir2)를 복사하는 것처럼 보이므로 올바른 경로를 사용하여 명령을 변경하거나 다음과 같이 도커 파일의 복사 원본 경로를 변경할 수 있습니다.
COPY /dir2 /content
ymldocker-compose.yml 파일의 폴더에 context: 합니다.
예:
app:
build:
context: ../../
dockerfile: ./source/docker/dockerfile/Dockerfile
scaffold를 사용하는 경우 'context:'를 사용하여 각 이미지 도커 파일의 컨텍스트 위치를 지정합니다(context: ..../..../
apiVersion: skaffold/v2beta4
kind: Config
metadata:
name: frontend
build:
artifacts:
- image: nginx-angular-ui
context: ../../../
sync:
# A local build will update dist and sync it to the container
manual:
- src: './dist/apps'
dest: '/usr/share/nginx/html'
docker:
dockerfile: ./tools/pipelines/dockerfile/nginx.dev.dockerfile
- image: webapi/image
context: ../../../../api/
docker:
dockerfile: ./dockerfile
deploy:
kubectl:
manifests:
- ./.k8s/*.yml
scaffold run -f./scaffold.skl
img의 이름을 지정합니다.
적절한 볼륨 공유 사용
컨테이너 시작 방법에 대한 위 링크의 Makefile(파일 만들기)를 확인합니다.
docker build . -t proj-devops-img --no-cache --build-arg UID=$(shell id -u) --build-arg GID=$(shell id -g) -f src/docker/devops/Dockerfile
Composer를 사용하는 사용자를 위한 솔루션은 상위 폴더를 가리키는 볼륨을 사용하는 것입니다.
#docker-composer.yml
foo:
build: foo
volumes:
- ./:/src/:ro
하지만 도커 파일에서 볼륨을 가지고 노는 것은 가능하다고 확신합니다.
bcs를 실행하면 안 됩니다. build를 이식할 수 있도록 하는 것이 목적이지만, 다음을 수행해야 할 경우:
에게 도가설도지시록하를 합니다.context:
상위 폴더로 이동합니다.를 들어 예들다같경우은과음어가 있는 .Documents
( 상폴더):/ssl
그리고./my-proj
다음과 같이 컨테이너에 SSL 파일을 복사하도록 Docker에 지시할 수 있는 하위 폴더:
은 이도작파다위있습니다에에 있습니다.Documents/my-proj/compose.yaml
.
nginx:
build:
context: ../
dockerfile_inline: |
FROM nginx:latest
WORKDIR /etc/nginx
COPY /ssl/example.com/certificate.crt ssl/
COPY /ssl/example.com/private.key ssl/
container_name: nginx
restart: unless-stopped
ports: [80:80,443:443,59840:59840]
volumes:
- $NGINX_CONF_FILEPATH:/etc/nginx/conf.d/default.conf
언급URL : https://stackoverflow.com/questions/24537340/docker-adding-a-file-from-a-parent-directory
'programing' 카테고리의 다른 글
최대 절전 모드:역직렬화할 수 없음 - 잘못된 스트림 헤더 (0) | 2023.08.05 |
---|---|
더 작은 크기로 재할당을 호출하면 나머지가 해방된다고 가정할 수 있습니까? (0) | 2023.08.05 |
메인 스레드에서 메서드를 호출하시겠습니까? (0) | 2023.08.05 |
Swift UI 해제 모달 (0) | 2023.08.05 |
전자 메일을 보내기 위해 Send-MailMessage 명령에 자격 증명을 전달하는 방법 (0) | 2023.08.05 |