Файл, скопированный в образ Docker, исчезает - PullRequest
0 голосов
/ 12 октября 2018

У меня есть этот многоэтапный Dockerfile.Я делаю программу в образе сборки, собираю содержимое, копирую его в основное изображение, распаковываю его.После запуска контейнера, когда я вхожу в контейнер, я больше не могу найти файл.Однако, используя команды "ls", я вижу, что он был скопирован и извлечен.Я не знаю, имеет ли это какое-либо отношение к тому факту, что у меня есть корневой каталог приложения как том.Я сделал это для ускорения сборки после внесения изменений в код.

docker-compose.yml

version: "3"
services:
  web:
    build: .
    ports:
      - "5000:5000"
      - "5432:5432"
    volumes:
      - ".:/code"
    environment:
      - PORT=5000
      # TODO: Should be set to 0 for production
      - PYTHONUNBUFFERED=1

Dockerfile

# Build lab-D
FROM gcc:8.2.0 as builder
RUN  apt-get update && apt-get install -y libxerces-c-dev
WORKDIR /lab-d/
RUN git clone https://github.com/lab-d/lab-d.git
WORKDIR /lab-d/lab-d/
RUN autoreconf -if
RUN ./configure --enable-silent-rules 'CFLAGS=-g -O0 -w' 'CXXFLAGS=-g -O0 -w' 'LDFLAGS=-g -O0 -w'
RUN make
RUN make install
WORKDIR /lab-d/
RUN ls
RUN tar -czf labd.tar.gz lab-d


# Main Image
FROM library/python:3.7-stretch
RUN apt-get update && apt-get install -y python3 python3-pip \
    postgresql-client \
    # lab-D requires this library
    libxerces-c-dev \
    # For VIM
    apt-file 

RUN apt-file update && apt-get install -y vim

RUN pip install --upgrade pip

COPY requirements.txt /
RUN pip3 install --trusted-host pypi.org -r /requirements.txt

RUN pwd
RUN ls .
COPY --from=builder /lab-d/labd.tar.gz /code/labd.tar.gz
WORKDIR /code
RUN pwd
RUN ls .
RUN tar -xzf labd.tar.gz
RUN ls .
run pwd
RUN ls .

CMD ["bash", "start.sh"]

docker-compose build --no-cache

...
Step 19/29 : RUN pwd
 ---> Running in a856867bf69a
/
Removing intermediate container a856867bf69a
 ---> f1ee3dca8500
Step 20/29 : RUN ls .
 ---> Running in ee8da6874808
bin
boot
dev
etc
home
lib
lib64
media
mnt
opt
proc
requirements.txt
root
run
sbin
srv
sys
tmp
usr
var
Removing intermediate container ee8da6874808
 ---> e8aec80955c9
Step 21/29 : COPY --from=builder /lab-d/labd.tar.gz /code/labd.tar.gz
 ---> 72d14ab4e01f
Step 22/29 : WORKDIR /code
 ---> Running in 17873e785c17
Removing intermediate container 17873e785c17
 ---> 57e8361767ca
Step 23/29 : RUN pwd
 ---> Running in abafd210abcb
/code
Removing intermediate container abafd210abcb
 ---> c6f430e1b362
Step 24/29 : RUN ls .
 ---> Running in 40b9e85261c2
labd.tar.gz
Removing intermediate container 40b9e85261c2
 ---> f9ee8e04d065
Step 25/29 : RUN tar -xzf labd.tar.gz
 ---> Running in 6e60ce7e1886
Removing intermediate container 6e60ce7e1886
 ---> 654d3c791798
Step 26/29 : RUN ls .
 ---> Running in 0f445b35f399
lab-d
labd.tar.gz
Removing intermediate container 0f445b35f399
 ---> 7863a15534b1
Step 27/29 : run pwd
 ---> Running in 9658c6170bde
/code
Removing intermediate container 9658c6170bde
 ---> 8d8e472a1b95
Step 28/29 : RUN ls .
 ---> Running in 19da5b77f5b6
lab-d
labd.tar.gz
Removing intermediate container 19da5b77f5b6
 ---> 140645efadbc
Step 29/29 : CMD ["bash", "start.sh"]
 ---> Running in 02b006bdf868
Removing intermediate container 02b006bdf868
 ---> 28d819321035
Successfully built 28d819321035
Successfully tagged -server_web:latest

start.sh

#!/bin/bash

# Start the SQL Proxy (Local-only)
pwd
ls .
./cloud_sql_proxy -instances=api-project-123456789:us-central1:sq=tcp:5432 \
                  -credential_file=./config/google_service_account.json &
ls .            
# Override with CircleCI for other environments
cp .env.development .env
ls .
python3 -u ./server/server.py

1 Ответ

0 голосов
/ 12 октября 2018

В вашем Dockerfile вы

COPY --from=builder /lab-d/labd.tar.gz /code/labd.tar.gz
WORKDIR /code
RUN tar -xzf labd.tar.gz

Но тогда ваш docker-compose.yml указывает

volumes:
  - ".:/code"

, что приводит к тому, что текущий каталог на хосте монтируется поверх /codeв контейнере, и каждая последняя часть работы вашего Dockerfile скрыта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...