質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

7947閲覧

root権限の無いユーザでdocker-composeを実行する

gano

総合スコア39

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/05/17 08:46

環境

CentOS 7.8
Docker version 17.09.0-ce
docker-compose version 1.27.4

実現したいこと 

(1)CentOS内で、Dockerを起動し、MySQLとphpmyadmin立ち上げたい

(2)MySQLは以下のように利用したい。
外部からSSH→ (SSHポートフォワーディング) → Docker→ MySQL

(3)SSHはroot以外のユーザで接続したい。

困っていること

(1)root以外で docker-compose up -dを実施すると、Permission Denied Errorになる
(2)rootで、docker-compose up -dを実施すると、root以外のユーザから開けたポートが見えず、アクセスができない
※ rootで lsof -i:XXXを実行すると開けたポートを確認できる

docker-compose.yml

yml

1version: '3.8' 2 3services: 4 nginx: 5 image: nginx:latest 6 ports: 7 - 8099:80 8 volumes: 9 - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf 10 - ./htdocs:/var/www/html 11 depends_on: 12 - php 13 restart: always 14 15 php: 16 build: ./php 17 volumes: 18 - ./htdocs:/var/www/html 19 depends_on: 20 - mysql 21 restart: always 22 23 mysql: 24 image: mysql:5.7 25 volumes: 26 - db-data:/var/lib/mysql 27 environment: 28 MYSQL_ROOT_PASSWORD: 'password' 29 ports: 30 - 13306:3306 31 restart: always 32 33 phpmyadmin: 34 image: phpmyadmin/phpmyadmin:latest 35 environment: 36 PMA_HOST: mysql 37 ports: 38 - 18080:80 39 depends_on: 40 - mysql 41 restart: always 42 43volumes: 44 db-data:

その他実施したこと

上記ymlファイルにて、各サービスに対して、起動したいユーザのユーザ名を記入 user: XXXX:root したところ、Permission Deniedのエラーは消えたように見えますが、Cannot start service mysql: linux spec user: unable to find user XXXXというエラーが出ます。

アドバイスお願いいたします。

お手数をおかけしますが、どなたか詳しい方がいらっしゃいましたら、アドバイスいただけないでしょうか。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

root以外で docker-compose up -dを実施すると、Permission Denied Errorになる

root以外のワークユーザをdockerグループに追加&docker-composeにアクセス権限を付与する。

(2)rootで、docker-compose up -dを実施すると、root以外のユーザから開けたポートが見えず、アクセスができない

見えないとはどういうことでしょうか?
リモートのホストからMySQLにアクセスできないということでしょうか?
デフォルトのMySQLは異なるホストからアクセスできない権限設定のはずなので、リモートホストからアクセスできるように設定を変更する必要があると思います。

上記ymlファイルにて、各サービスに対して、起動したいユーザのユーザ名を記入 user: XXXX:root したところ、Permission Deniedのエラーは消えたように見えますが、Cannot start service mysql: linux spec user: unable to find user XXXXというエラーが出ます。

コンテナ内に指定されたXXXというユーザがいないからエラーが発生されているかと思います。

投稿2021/05/17 11:03

comefigo

総合スコア1045

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gano

2021/05/21 01:29 編集

ご回答ありがとうございました。 ご連絡大変遅くなりまして、申し訳ありません。 現在、立て込んでおりまして、頂いたアドバイスをもとにした検証ができておりません。完了次第改めて回答させていただきます。 >見えないとはどういうことでしょうか? 見えないというのは、root以外のユーザから lsof -i:XXXX で該当ポートを使用しているプロセスを確認したかったのですが、表示されないという状態です。 rootにてlsofを実行すると起動中のプロセスが表示されます。。。
gano

2021/05/25 02:07

返答遅くなりまして申し訳ありません。 無事解決できました。 説明不足で申し訳ありません。 実行ユーザのdockerグループへの追加は実施済みでした。 docker-compose.ymlに直接、mysqlの実行ユーザを記載したら解決できました。 ありがとうございます。
comefigo

2021/05/25 09:06

無事解決できてよかったです!
guest

0

一般ユーザで docker や docker-compose を操作する方法

docker-compose 実行時、 ('Connection aborted.', PermissionError(13, 'Permission denied')) のようなエラーが出るのは、デフォルトの Docker Engine は root でしか操作できない権限だからです。

一般ユーザで Docker を操作できるようにするには、 Linux ホスト上の docker グループに、Docker 操作を許可したいユーザを追加する必要があります (参考:ドキュメント)。

例えばユーザ名が example であれば、次のようにして docker グループを追加します。

shell

1# usermod -aG docker example

ただし、ここで docker グループに追加したユーザは、事実上、そのホストにおける root と同等の権限を持つので注意が必要です。(rootlessではない)初期状態の Docker は root 権限で動作しているため、操作によってはサーバ内の全てのファイルにアクセス可能である、ということを知っておく必要があります。

docker-compose の実行とポート

(2)rootで、docker-compose up -dを実施すると、root以外のユーザから開けたポートが見えず、アクセスができない
※ rootで lsof -i:XXXを実行すると開けたポートを確認できる

これには2つの原因が考えられます。

「(1)root以外で docker-compose up -dを実施すると、Permission Denied Errorになる」とありますが、これは、エラーが出ているのに加え、コンテナは正常に起動していません。

おそらく docker-compose ps を実行すると、 StateExit となって正常起動できていないはずです。これは、デフォルトでは root 以外操作できないためです。

そのため、Error は出たもののの、起動されたつもりかもしれませんが、実際にはポートを開いていないことが考えられます。

もう1つの原因としては、既に何か別のプロセスがホスト上のポートを使用している場合です。Docker を使っていたとしても、通常の Linux と同様、同じポートを複数のプロセスで同時に利用できません。

ですので「※ rootで lsof -i:XXXを実行すると開けたポートを確認できる 」とありますから、そもそも Docker で利用する前に、何か別のプロセスが対象プロセスを利用済みの場合も考えられます。

docker-compose.yml でのユーザ指定とは

起動したいユーザのユーザ名を記入 user: XXXX:root したところ

この記入は、 docker-compose.yml で定義したサービス(コンテナ)を実行する「コンテナの中でのユーザ名」を指定します。

Docker Compose を通して対象のコンテナを実行しようとしても、その「ユーザ名」に該当する情報が、コンテナの元となる Docker イメージに存在しなければ、エラーになります。

unable to find user XXXX は、まさに、指定したユーザが Docker イメージの中の設定にはないという意味です。

投稿2021/05/22 00:17

zembutsu

総合スコア1584

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gano

2021/05/25 02:10

ご返信遅くなりまして、大変申し訳ありません。 なんとか解決ができました。 実行ポートの件は、lsofにsudoをつけて実行したら表示されました。実行権限がなかったのだと思います。 アドバイスより判断し、ymlファイルにmysqlのユーザを追加したところ、うまく表示されました。 その後、Dockerとファイヤウォールで別々にiptablesを操作するところに悩みましたが、そちらもうまく解決できました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問