1. 程式人生 > >docker進入容器的四種方法

docker進入容器的四種方法

在使用Docker建立了容器之後,大家比較關心的就是如何進入該容器了,其實進入Docker容器有好幾多種方式,這裡我們就講一下常用的幾種進入Docker容器的方法。

進入Docker容器比較常見的幾種做法如下:
1.使用docker attach
2.使用SSH
3.使用nsenter

4.使用exec

目前最為常用的是第四種,exec

一、使用docker attach進入Docker容器

建立一個守護態的Docker容器:

sudo docker run -itd ubuntu:16.04 /bin/bash  

-d是detach,讓/bin/bash在後臺執行

然後我們使用docker ps檢視到該容器資訊,接下來就使用docker attach進入該容器

sudo docker attach 44fc0f0582d9 
可以看到我們已經進入到該容器中了。
但在,使用該命令有一個問題。當多個視窗同時使用該命令進入該容器時,所有的視窗都會同步顯示。如果有一個視窗阻塞了,那麼其他視窗也無法再進行操作。

因為這個原因,所以docker attach命令不太適合於生產環境,平時自己開發應用時可以使用該命令。

二、使用SSH進入Docker容器

在生產環境中排除了使用docker attach命令進入容器之後,相信大家第一個想到的就是ssh。在映象(或容器)中安裝SSH Server,這樣就能保證多人進入容器且相互之間不受干擾了,相信大家在當前的生產環境中(沒有使用Docker的情況)也是這樣做的。但是使用了Docker容器之後不建議使用ssh進入到Docker容器內。關於為什麼不建議使用,請參考如下文章:

三、使用nsenter進入Docker容器

nsenter:namespace enter。

需要安裝nsenter,如果沒有安裝的話,按下面步驟安裝即可(注意是主機而非容器或映象)

具體的安裝命令如下:

wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz  
tar -xzvf util-linux-2.24.tar.gz  
cd util-linux-2.24/  
./configure --without-ncurses  
make nsenter  
sudo cp nsenter /usr/local/bin  

nsenter可以訪問另一個程序的名稱空間。所以為了連線到某個容器我們還需要獲取該容器的第一個程序的PID。可以使用docker inspect命令來拿到該PID。

docker inspect  container ID

sudo docker inspect 44fc0f0582d9  

可以顯示出PID

最後利用nsenter:

sudo nsenter --target 3326 --mount --uts --ipc --net --pid 

3326就是PID。

該方法的缺點在於步驟比較繁瑣。

四、docker exec進入Docker容器

這種方式相對更簡單一些,下面我們來看一下該命令的使用:

[[email protected] ~]$ docker exec --help 

Usage:	docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

Run a command in a running container

Options:
  -d, --detach               Detached mode: run command in the background
      --detach-keys string   Override the key sequence for detaching a container
  -e, --env list             Set environment variables (default [])
      --help                 Print usage
  -i, --interactive          Keep STDIN open even if not attached
      --privileged           Give extended privileges to the command
  -t, --tty                  Allocate a pseudo-TTY
  -u, --user string          Username or UID (format: <name|uid>[:<group|gid>])

命令如下:

-it 標準輸入和關聯偽終端,-it後跟容器ID,/bin/bash是命令,表示在該容器中執行該命令

sudo docker exec -it 775c7c9ee1e1 /bin/bash  

相關推薦

docker進入容器方法

在使用Docker建立了容器之後,大家比較關心的就是如何進入該容器了,其實進入Docker容器有好幾多種方式,這裡我們就講一下常用的幾種進入Docker容器的方法。進入Docker容器比較常見的幾種做法如下:1.使用docker attach2.使用SSH3.使用nsente

Docker進入容器的幾方法

進入容器的幾種方法:     1、exec         通過docker ps 檢視需要進入的容器pid         執行  &nb

SpringBoot給容器中註冊元件的方法(簡易版)

本文介紹的方法比較簡潔,需要有Spring基礎 方法一:包掃描+註解 1.配置類,標明註解掃描的範圍 //告訴Spring這是一個配置類 @Configuration //註解所掃描的範圍,類似於spring配置檔案的 context:component-scan

Spring註解版--spring給容器註冊元件的方法

Spring註解版–spring給容器註冊元件的四種方法: 這是我看網上視訊教程之後,自己整理的,加強記憶。 文章目錄 Spring註解版--spring給容器註冊元件的四種方法: 一. `@Configuration`&`@Bean`-

增加表空間大小的方法

已存在數據 max 方法 手工 pro strong 增加表空間 增加 四種 增加表空間大小的四種方法Meathod1:給表空間增加數據文件ALTER TABLESPACE app_data ADD DATAFILE ‘D:\ORACLE\PRODUCT\10.2.0\OR

Python格式化輸出的方法

python#!/usr/bin/env python#coding:utf-8name = raw_input("name:")sex = raw_input("sex:")age = int(raw_input("age:"))info0 = ‘‘‘-------- inio fo0 -------nam

Button點擊事件的方法

ase extend extends make androi tid ont edi .get 1、匿名內部類 Button btn_1 = (Button) findViewById(R.id.btn_1); //1.匿名內部類 btn_

【mysql】查看版本的方法

span clas latin min days use ble dha pre 1:在終端下:mysql -V。 以下是代碼片段: [[email protected]/* */ ~]$ mysql -V mysql Ver 14.7 Distrib 4.

列表整體加1方法

append map 整體 num enume for in rate int pen 1、 list = [0,1,2,3,4,5,6,7,8,9] num = map(lambda x:x+1,list)print num 2、list1=[]for i in lis

遍歷Map的方法

html pos val 方法 div body put next shm public static void main(String[] args) { Map<String, String> map = new HashMap<String,

JS 數組去重的方法

new return obj 元素 數組去重 != lis 相同 break 1、通過遍歷原數組和新數組是否重復。new一個新數組存放已經遍歷過的、唯一的元素。 function uniqueArr(list){   var newArr= [list[0]];   for

運行jar應用程序引用其他jar包的方法

撰寫 company 有一個 重寫 方式 工作 dex some sta 方法一、使用Bootstrap Classloader來加載這些類。 我們可以在運行時使用如下參數: -Xbootclasspath:完全取代系統Java classpath.最好不用。-Xbootc

JS生成 UUID的方法

ide replace rsa func digits 隨機生成 turn abcdefg 標準 全局唯一標識符(GUID,Globally Unique Identifier)也稱作 UUID(Universally Unique IDentifier) 。 GUID是

Jmeter添加變量的方法

sha 更新 循環 logs false del 文件名 image stop 一、在樣本中添加同請求一起發送的參數。根據服務器設置的數據類型,來添加不同類型的參數 二、用戶定義的變量 1、創建:添加->配置元件->用戶定義的變量 2、作用:當前的線程組內所

vue中組件的方法總結

end bsp nbsp 四種 temp recommend show -s com 希望對大家有用 全局組件的第一種寫法 html: <div id = "app"> <show></show></div>

java 遍歷arrayList的方法

void 線程安全 接口 線程同步 object類 轉型 依次 調用 values package com.test; import java.util.ArrayList; import java.util.Iterator; import java.util.Lis

css垂直居中的方法

center utf-8 borde gre abs ddl for relative eight <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8">

加載 AssetBundle 的方法

recently send log making before 返回 ack one perf 【加載 AssetBundle 的四種方法】 1、AssetBundle.LoadFromMemoryAsync(byte[] binary, uint crc = 0);

java語言復制數組的方法

原生態 png mit 宋體 angle 連接 earch oat nowrap 參考:http://www.cnblogs.com/dream-it-possible/p/7018804.html 來源於牛客網的一道選擇題: JAVA語言的下面幾種數組復制方法中,哪個

批量殺死MySQL連接的方法詳解

如果 詳解 mysql into 連接 進行 0 rows awk sel 方法一   通過information_schema.processlist表中的連接信息生成需要處理掉的MySQL連接的語句臨時文件,然後執行臨時文件中生成的指令。 mysql> selec