Могу ли я в любом случае заставить docker-compose загрузить файл ctx.docker из того же каталога, что и docker-compose.yml, и установить контекст таким, какой я есть?
AFAIK: Нет, нет.
Все, с чем Dockerfile взаимодействует во время сборки, должно быть в определенном контексте. Итак, вам нужно, чтобы .aws
и текущая папка, в которой живет docker-compose.yml
и т. Д., Находились в одном и том же контексте, то есть контекст должен быть наивысшим уровнем вашей соответствующей структуры каталогов, а затем вам нужно будет определить относительные пути к нужным файлам (Dockerfiles и .aws
).
Возможно, вы могли бы установить /home/$USER
в качестве контекста сборки (или даже более высокий уровень, в зависимости от того, где находятся ваши файлы Docker и т. Д.), Но тогда вам также потребуется создать файл .dockerignore
и игнорировать все в контексте, кроме .aws
и текущей папки ... Как вы можете видеть, это было бы беспорядочно и не очень воспроизводимо.
Я бы предложил использовать том вместо COPY
внутри папки ~/.aws
внутри вашего контейнера.
Пример:
nico@lapap12:~$ ls -l ~/.aws
total 0
-rw-r--r-- 1 nico nico 0 May 22 17:45 foo.bar
docker-compose.yml
version: "3.7"
services:
allinone:
image: alpine:latest
volumes:
- ~/.aws:/tmp/aws:ro
command: ls -l /tmp/aws
nico@lapap12:~/local/so$ docker-compose up
Creating so_allinone_1 ... done
Attaching to so_allinone_1
allinone_1 | total 0
allinone_1 | -rw-r--r-- 1 1000 1000 0 May 22 15:45 foo.bar
so_allinone_1 exited with code 0
Вы можете пойти оттуда и скопировать содержимое /tmp/aws
в /root/.aws
, если вы хотите изменить содержимое этой папки в контейнере, но не хотите прикасаться к нему на реальном хосте.