독점 작성 파일은 읽기 전용으로 만든 컨테이너의 루트 볼륨을 만들어 보안을 강화하려고합니다. docker-compose.yml
의docker-tosefs가 작동하지 않음
관련 부분은 :
version: '2'
services:
mysql:
image: mariadb:10.1
read_only: true
tmpfs:
- /var/run/mysqld:uid=999,gid=999
- /tmp
volumes:
- mysql:/var/lib/mysql
restart: always
volumes:
mysql:
문제는 상기 tmpfs
생성되는 것은 아니다. docker-compose run --rm mysql /bin/bash
을 사용하여 컨테이너의 인스턴스를 실행하는 경우 항목에도 불구하고 /var/run/mysqld
디렉토리가 읽기 전용이고 touch /var/run/mysqld/foo
에 대한 시도가 실패합니다. 이것이 MySQL이 소켓과 pid 파일을 저장하는 곳이기 때문에 모든 일이 실패하게됩니다. 이 경우 tmpfs
항목이 작동하지 않는 이유가 확실하지 않습니다.
$ ls -la /var/run/mysqld
total 8
drwxrwxrwx 2 mysql mysql 4096 Jan 17 22:14 .
drwxr-xr-x 4 root root 4096 Jan 18 22:55 ..
을하지만 난 여전히 할 수 없습니다 :
mysql_1 | 2017-01-27 20:53:45 140515784030144 [Note] mysqld (mysqld 10.1.21-MariaDB-1~jessie) starting as process 1 ...
mysql_1 | 2017-01-27 20:53:45 140515784030144 [Note] InnoDB: Using mutexes to ref count buffer pool pages
mysql_1 | 2017-01-27 20:53:45 140515784030144 [Note] InnoDB: The InnoDB memory heap is disabled
mysql_1 | 2017-01-27 20:53:45 140515784030144 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
mysql_1 | 2017-01-27 20:53:45 140515784030144 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
mysql_1 | 2017-01-27 20:53:45 140515784030144 [Note] InnoDB: Compressed tables use zlib 1.2.8
mysql_1 | 2017-01-27 20:53:45 140515784030144 [Note] InnoDB: Using Linux native AIO
mysql_1 | 2017-01-27 20:53:45 140515784030144 [Note] InnoDB: Using SSE crc32 instructions
mysql_1 | 2017-01-27 20:53:45 140515784030144 [Note] InnoDB: Initializing buffer pool, size = 256.0M
mysql_1 | 2017-01-27 20:53:45 140515784030144 [Note] InnoDB: Completed initialization of buffer pool
mysql_1 | 2017-01-27 20:53:45 140515784030144 [Note] InnoDB: Highest supported file format is Barracuda.
mysql_1 | 2017-01-27 20:53:48 140515784030144 [Note] InnoDB: 128 rollback segment(s) are active.
mysql_1 | 2017-01-27 20:53:48 140515784030144 [Note] InnoDB: Waiting for purge to start
mysql_1 | 2017-01-27 20:53:48 140515784030144 [Note] InnoDB: Percona XtraDB (http://www.percona.com) 5.6.34-79.1 started; log sequence number 239403989
mysql_1 | 2017-01-27 20:53:48 140515005662976 [Note] InnoDB: Dumping buffer pool(s) not yet started
mysql_1 | 2017-01-27 20:53:48 140515784030144 [Note] Plugin 'FEEDBACK' is disabled.
mysql_1 | 2017-01-27 20:53:49 140515784030144 [Note] Server socket created on IP: '::'.
mysql_1 | 2017-01-27 20:53:49 140515784030144 [ERROR] Can't start server : Bind on unix socket: Read-only file system
mysql_1 | 2017-01-27 20:53:49 140515784030144 [ERROR] Do you already have another mysqld server running on socket: /var/run/mysqld/mysqld.sock ?
mysql_1 | 2017-01-27 20:53:49 140515784030144 [ERROR] Aborting
나는 올바른 (그리고 mysql
사용자의 UID는 999이다) 디렉토리에 대한 사용 권한을 확인할 수 있습니다 심지어
$ touch /var/run/mysqld/foo
touch: cannot touch '/var/run/mysqld/foo': Read-only file system
루트로 실행하면됩니다.
내가 잘못하고있는 아이디어가 있습니까?
제쳐두고, /tmp
파일 시스템이 정상적으로 작동합니다.
도커를 사용하고 있습니까? https://docs.docker.com/compose/compose-file/#tmpfs는 "주 : (버전 3) Compose 파일로 웜 모드에서 스택을 배포 할 때이 옵션은 무시됩니다." – six8
아니요. 똑바로 도커 - 작성하십시오. – koehn
나도.(필러) – Otheus