回答編集履歴

1

実験結果を追記してみました。

2019/05/14 11:48

投稿

suama
suama

スコア1997

test CHANGED
@@ -149,3 +149,155 @@
149
149
 
150
150
 
151
151
  抜ける時は、 Ctrl-A k で。
152
+
153
+
154
+
155
+ ## 追記:userns-remap の件
156
+
157
+
158
+
159
+ > `"userns-remap":"default"`でユーザ名前空間というものを使えるようなのですが,Docker for Macでどう適用するか教えてもらえないでしょうか?
160
+
161
+
162
+
163
+ この機能、あまり詳しくないのですが、せっかくですので試してみました。
164
+
165
+ 以下のようにDaemon -> Advanced からJSONでuserns-remapの設定を追加して、Apply & Restartしてみたところ、起動に失敗しました。
166
+
167
+
168
+
169
+ 質問者様も失敗した、とのことですが、最終的には工場出荷状態に戻しましたでしょうか?
170
+
171
+
172
+
173
+ ```json
174
+
175
+ {
176
+
177
+ "debug" : true,
178
+
179
+ "experimental" : true,
180
+
181
+ "userns-remap" : "default"
182
+
183
+ }
184
+
185
+ ```
186
+
187
+
188
+
189
+ ### 失敗の理由
190
+
191
+
192
+
193
+ 以下は、回答というより確認してみた結果です。求めている答えとは違うかもしれませんが、これもやはり「Docker for Macがそのような設定になっている」ということのようです。
194
+
195
+
196
+
197
+ userns-remapの設定について、日本語のドキュメントを見てみました。
198
+
199
+ `"userns-remap":"default"` と設定すると、
200
+
201
+
202
+
203
+ > Docker は dockermap というユーザ名とグループ名が存在しているかどうか確認し、無ければ作成します。
204
+
205
+
206
+
207
+ と書いてありますね。
208
+
209
+
210
+
211
+ - [http://docs.docker.jp/engine/reference/commandline/daemon.html#default-docker](http://docs.docker.jp/engine/reference/commandline/daemon.html#default-docker)
212
+
213
+
214
+
215
+ 上記に書いたとおり、実際の処理はMac上に直接ではなく仮想マシン内なので、screen ... で中に入って確認してみます。また、仮想マシン内で、ユーザの登録情報を見てみると、rootだけになっています。
216
+
217
+
218
+
219
+ ```bash
220
+
221
+ docker-desktop:~# cat /etc/passwd
222
+
223
+ root:x:0:0:root:/root:/bin/sh
224
+
225
+ ```
226
+
227
+
228
+
229
+ dockermapというユーザやグループは存在しないので、では、「先に作っておこうかな」と考えて、adduserを実行してみると、こんなエラーになります。
230
+
231
+
232
+
233
+ ```bash
234
+
235
+ docker-desktop:~# adduser dockermap
236
+
237
+ adduser: /etc/passwd: Read-only file system
238
+
239
+ ```
240
+
241
+
242
+
243
+ 実のところ、このDocker for Mac (Docker Desktop for Mac)の利用する仮想マシンは、軽量Linuxマシンで、かつ、**一部のファイルシステムはRead Only**になって起動している状態です。
244
+
245
+
246
+
247
+
248
+
249
+ ```bash
250
+
251
+ # mountコマンドを実行、Read Onlyのファイルシステムをgrepしてみる
252
+
253
+
254
+
255
+ docker-desktop:~# mount | grep '(ro'
256
+
257
+ /dev/sr0 on / type iso9660 (ro,relatime)
258
+
259
+ /dev/sr2 on /containers/services/docker type iso9660 (ro,relatime)
260
+
261
+ ```
262
+
263
+
264
+
265
+ / (rootパーティション) がRead Onlyになっており、ユーザ情報やOSの設定情報が入った /etc 以下もRead Onlyなので、結局ユーザ追加のために/etc/passwdなどに書き込みしようとすると、エラーになってしまいます。
266
+
267
+
268
+
269
+ ちなみに、あまり意味はないかもしれませんが、`"userns-remap":"default"` ではなく、`"userns-remap":"root"` として、唯一存在しているuser: rootを指定してRestartすると、エラーにはなりません。
270
+
271
+
272
+
273
+ ## 結局どうするのがいいの?使い分けは?
274
+
275
+
276
+
277
+ ここから先は個人の考えとか印象なので、参考までに。
278
+
279
+
280
+
281
+ Docker Desktop for Macは、GUIや便利ツールも含めて簡単にDocker環境を構築して検証するためのもの、と思ったほうがよさそうです。
282
+
283
+
284
+
285
+ また、**Dockerホスト専用の軽量OS**は、コンテナを格納する領域以外の大部分が読み込み専用となっているものが多いです。必要な機能はコンテナの起動で実現するため、ベースOS部分には変更を加える必要が無い、という前提でそうなっていると思います。
286
+
287
+
288
+
289
+
290
+
291
+ ある程度自由にパッケージを追加したり、ホストOS側でもDocker以外の何かを動かすことが前提の環境なら、複数ユーザがログインしたり複数サービスが起動したり、ファイルシステムへの書き込みが可能だったりということで、結果的に気をつけないといけない、ということは間違いないかと思っています。
292
+
293
+
294
+
295
+ もし、そういった点に注意して環境を作ってみたい、サーバを構築したいということであれば、Docker for Macではなく、実際のCentOSやUbuuntuなどのサーバを使うのがいいと思います。
296
+
297
+
298
+
299
+ また、Mac上にVMWareを入れて、そこでCentOSを立てて試す、というところまで実施すれば良いのかなと思います。
300
+
301
+
302
+
303
+ いろいろ分かっていない点もありますので、他の皆さんのコメントもあれば、ぜひ。