programing

도커: 상위 디렉토리에서 파일 추가

instargram 2023. 8. 5. 09:50
반응형

도커: 상위 디렉토리에서 파일 추가

내 안에서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

왜 그리고 어떻게 그것을 정확하게 하는지 아는 사람이 있습니까?

  1. cd대신 상위 디렉토리로 이동
  2. 도커 파일의 경로를 지정하여 상위 디렉토리에서 이미지 작성
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을 추가할 수 없습니다.

편집: 이제 옵션이 있습니다(-fDocker 파일의 경로를 설정하려면 @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플래그는 나의 문제를 해결하지 못합니다. 왜냐하면 나의 문제이기 때문입니다.onbuildimage는 폴더에서 파일을 찾고 다음과 같이 호출해야 했습니다.

-f foo/bar/Dockerfile foo/bar

대신에

-f foo/bar/Dockerfile .

또한 이 방법은 일부 경우에만 사용할 수 있습니다.-f깃발

다음 설정이 지정된 경우:

+ parent
    + service1
        - some_file.json
    + service2
        - Dockerfile

도커 파일이 있는 경우service2그리고 복사하기를 원합니다.some_file.json부터service1service2 디렉토리 내에서 실행할 수 있습니다.

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또는ADDdir11에 있고 현재 디렉토리는 dir12인 도커 파일의

이미지를 올바르게 빌드하려면 다음 명령을 실행해야 합니다.

docker build -t image-name:tag -f ../dir11/dockerfile ../../dir2
  • -t your-image-name' 및 사항은 'name:tag' 형식의 입니다.
  • -f ../dir11/dockerfile도커 파일의 이름(기본값은 'PATH/도커 파일')
  • ../../dir2COPY 또는 ADD 명령에 대해 최신 상태가 될 경로

갱신하다

이것을 실수로 실행한다고 가정해 보겠습니다.

docker build -t image-name:tag -f ../dir11/dockerfile ../../

이것은 당신의 문제를 해결하지 못할 것입니다. 왜냐하면 이 경우에는COPY / /contentdir0 컨텐츠(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구축합니다.

  • 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

반응형