【Docker】コンテナにROOTで入る方法

【Docker】コンテナにROOTで入る方法

Dockerfileの構築時にUserを決めてしまうことがあります。
その状態でいつものおまじないをするとROOTじゃないのでアプリインストールが出来ないなど不都合も発生します。

と言う事で、コンテナにROOTで入るための備忘録です。

参考用のdocker-compose.yml

version: '3'
services:
  nginx:
    image: nginx:1.17
    ports:
      - "8000:8000"
    volumes:
      - ./nginx/conf:/etc/nginx/conf.d
      - ./nginx/uwsgi_params:/etc/nginx/uwsgi_params
      - ./static:/static
    depends_on:
      - python

  mysql:
    image: mysql:5.7
    container_name: SQL_CON
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./logs:/var/log/mysql
      - ./entrypoint/initdb.d/client/:/docker-entrypoint-initdb.d
      - ./entrypoint/startdata/:/start-data
    env_file: ./mysql/.env.dev
    ports:
      - "3306:3306"

  python:
    container_name: PY_CON
    build: ./python
    command: uwsgi --socket :8001 --module mysite.wsgi --logto /tmp/uwsgi.log
    volumes:
      - ./src:/code
      - ./static:/static
    expose:
      - "8001"
    depends_on:
      - mysql
    restart: always

こんな感じで作ったコンテナに対してROOTログインしてみたいと思います。
手段は2つあります。

  1. サービス名を指定して docker-compose で入る
  2. コンテナIDを指定してdocker で入る

docker-composeで入る方法

私は普段のログインでdocker-composeを利用しているので馴染みやすいです。

sudo {docker-compose呼出し} exec --user root {サービス名} bash

user rootで入るよと宣言してログインするサービス名を記載します。
具体的には下の様になります。

sudo /usr/local/bin/docker-compose exec --user root python bash

具体例で記載しているpythonは【docker-compose.yml】に記載したサービス名です。
docker-composeにパスを通している場合は[ /usr/local/bin/ ]省略してdocker-composeでOKです。

コンテナIDを指定してdockerで入る方法

コンテナIDを記載する必要があるので【sudo docker ps -a】で必ずIDを把握しておきましょう。

sudo docker exec  -it -u root {コンテナID} bash

具体的には下の様になります。

sudo docker exec -it -u root 25fa816006b2 bash

【コンテナID】はコンテナイメージ名やサービス名に置き換える事はできません。
なので、現在立ち上がっているコンテナIDを【sudo docker ps -a】で調べる必要があります。

複数のサイトを管理している場合は同じサービス名で動けるdocker-compose利用が共通化出来ていいですね。
でも文字数が少ないのはdockerの方です。

まとめ

今回のこの記事は私のポカから生まれたものです。

立ち上げたコンテナにvimが入ってなかったため インストールしようとした所「permission 確認しろ」とはねられたんです。で、(root権限あると思い込んでるので)命令の書き方変えてみたり、OS違う奴入れて命令違うのか?とか右往左往。

DockerfileでUser指定してるからコンテナにrootで入ってないし、root権限持たせて無いし、そもそもsudo入れてないし、と。まぁ一番はDockerfileでvim入れとけって事なんですけどね。と言う事で今はvimインストール書いたDockerfileに作り変えました。

\ 最新情報をチェック /

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。