Вы можете использовать volumes
+ bind mount
для монтирования одного контейнера passwd
& group
в другой контейнер.
Далее приведен пример:
Если не использовать том, просто подтвердите исходное имя пользователя mysql
в тестовом сервисе:
docker_compose.yaml:
version: "3"
services:
db:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
test:
image: ubuntu:16.04
command: id mysql
depends_on:
- db
Выполните следующим образом:
$ docker-compose up
Creating network "23_default" with the default driver
Creating 23_db_1 ... done
Creating 23_test_1 ... done
Attaching to 23_db_1, 23_test_1
test_1 | id: 'mysql': no such user
db_1 | Initializing database
23_test_1 exited with code 1
Сверху вы можете видеть, что контейнер из ubuntu:16.04
не имеет пользователя mysql
, который является пользователем по умолчанию в mysql
:
test_1 |id: 'mysql': такого пользователя нет
Используйте тома, чтобы сделать user mysql
видимым для test
контейнера:
docker_compose.yaml:
version: "3"
services:
db:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- my_etc:/etc
test:
image: ubuntu:16.04
command: id mysql
depends_on:
- db
volumes:
- /tmp/etc-data/passwd:/etc/passwd
- /tmp/etc-data/group:/etc/group
volumes:
my_etc:
driver: local
driver_opts:
type: 'none'
o: 'bind'
device: '/tmp/etc-data'
Выполнить следующим образом, ПРИМЕЧАНИЕ: нам нужно новое /tmp/etc-data
до запуска:
$ mkdir -p /tmp/etc-data
$ docker-compose up
Creating network "23_default" with the default driver
Creating 23_db_1 ... done
Creating 23_test_1 ... done
Attaching to 23_db_1, 23_test_1
db_1 | Initializing database
test_1 | uid=999(mysql) gid=999(mysql) groups=999(mysql)
23_test_1 exited with code 0
Сверху вы можете увидетьtest
сервис уже может иметь пользователь mysql
:
test_1 |uid = 999 (mysql) gid = 999 (mysql) groups = 999 (mysql)
Небольшое объяснение:
вышеВначале используйте решение named volume
, чтобы вставить /etc
папку first container
в папку /tmp/etc-data
на хост-компьютере докера, затем второй контейнер будет использовать bind mount
для отдельного подключения passwd
& group
ко второму.контейнер.Как видите, второй контейнер просто монтирует 2 файла (passwd
, group
), поэтому он не будет скрывать другие файлы.