У меня очень простое изображение:
FROM node:11-alpine
WORKDIR /app
COPY src /app/src
RUN cd src \
&& npm i --no-cache \
&& npm run build
CMD cd src \
&& npm run start
Во время сборки все в порядке, например, простое ls -R /
открывает следующее дерево:
/:
app/
/app:
src/
/app/src:
package.json ...
Но когда я пытаюсьчтобы запустить его, я нахожу следующую структуру:
/:
app/
/app/:
src/
/app/src/:
src/ ... more files from the context dir that I never COPYed
/app/src/src/:
package.json ...
Если я RUN ls -R /
сразу после npm run build
, я получаю «хорошее» дерево, даже выполняя ls -R /
всего за один слой до CMD
Я получаюто же самое «хорошее» дерево, но любой слой после CMD (включая саму CMD) дает мне «неправильное» дерево, например:
CMD ls -R / && cd src && npm run start
Показывает /app/src/src
, как если бы он брал всесодержимое контекста dir и размещение его под WORKDIR/src
(т.е. /app/src
)
Почему Docker делает это?
Я работаю
Docker версия 18.09.3, сборка 774a1f4
docker-compose версия 1.23.2, сборка 1110ad0