2017-04-21 13 views
0

私は、Dockerイメージを、コンテナ内に(インストールするにはrootユーザーである必要があります)インストールして作成しています。ドッキングウィンドウの画像についてdockerイメージを作成できません。 "rootユーザーである必要があります"

# cat Dockerfile 
FROM ubuntu:16.04 
COPY $pwd/intel_virtual_gateway_console64_1_9_0.tar /root/ 
COPY $pwd/login.exp /root/ 
WORKDIR /root/ 
RUN tar -xvf intel_virtual_gateway_console64_1_9_0.tar 
RUN apt-get update && apt-get install -y expect \ 
         expect-dev \ 
         libxml2-utils 
RUN whoami 
RUN expect login.exp 

ビルドプロセス:

[email protected]:~/RAGHU/krishna# docker build -t release:4.0 . 
Sending build context to Docker daemon 633.5MB 
Step 1/8 : FROM ubuntu:16.04 
---> 6a2f32de169d 
Step 2/8 : COPY $pwd/intel_virtual_gateway_console64_1_9_0.tar /root/ 
---> Using cache 
---> 36e9ea407082 
Step 3/8 : COPY $pwd/login.exp /root/ 
---> Using cache 
---> 0fad538973d4 
Step 4/8 : WORKDIR /root/ 
---> Using cache 
---> f5d7f36bc37f 
Step 5/8 : RUN tar -xvf intel_virtual_gateway_console64_1_9_0.tar 
---> Using cache 
---> 6cab428f1bc2 
Step 6/8 : RUN apt-get update && apt-get install -y expect      expect-dev      libxml2-utils 
---> Using cache 
---> 5bb1ee67332f 

は、コンテナがrootユーザーとして実行されていることを確認するには、次の

Step 7/8 : RUN whoami 
---> Running in 112b87d77a08 
root 
---> 0c7eb38cc06b 
Removing intermediate container 112b87d77a08 
Step 8/8 : RUN expect login.exp 
---> Running in 5f186baf2f8d 
spawn ./virtualgatewayconsole_package/virtual_gateway_console_intel64 
Install Error 
-------------------------------------------------------------------------------- 
To install the application, you must be a root user. 
-------------------------------------------------------------------------------- 
Type any key to exit: ^C 

アプリケーションのインストールがたとえ失敗した理由を見つけることができません。 rootユーザーとして実行されます。

EDIT:login.expスクリプトを追加:このスクリプトは、私の機能を完了させるためにとても基本的です。

#cat login.exp 
#!/usr/bin/expect -f 

if 0 { 
    *************************READ THIS BEFORE START********************* 
    User password must consist of at least 3 of the following categories: 
    uppercase, lowercase, numeric, and non-alphanumeric. In case of violation 
    of this rule the Installation will fail! 
    ******************************************************************** 
    } 
set passwd "[email protected]" 
set username "raghu" 

spawn ./virtualgatewayconsole_package/virtual_gateway_console_intel64 
expect "Press Enter key to continue or q to quit:" 
send "\n" 

expect "Press ENTER for more, or q when done" 
send "q" 

sleep 5 
#expect "conditions of this license agreement?" 
expect "*(accept/decline): " 
send "accept\n" 

#Product installation 
expect "*Please type a selection \[1\]:" 
send "\n" 

expect "*Please type a selection (Press Enter to next):" 
send "\n" 

sleep 2 
#Configure TLS settings 
expect "*Enter TLS keystore password (only numbers, letters and [email protected]#$%^*()_+{}|.:?=-):" 
send $passwd 
send "\n" 

expect "*Retype TLS keystore password:" 
send $passwd 
send "\n" 

sleep 2 
expect "Please type a selection (Press Enter to next):" 
send "\n" 

#Configure host 
expect "Please type a selection (Press Enter to next):" 
send "\n" 

expect "Please type a selection (Press Enter to next):" 
send "\n" 

#Configure user for logging on the management console 
expect "Please type a selection (Press Enter to next):" 
send "\n" 

sleep 2 
expect "Enter user password (only numbers, letters, spaces and [email protected]#$%^*()_+{}|.:?=-):" 
send $passwd 
send "\n" 

expect "Retype user password:" 
send $passwd 
send "\n" 

expect "Please type a selection (Press Enter to next):" 
send "\n" 

sleep 2 
#Configure PostgreSQL service 
expect "Please type a selection (Press Enter to next):" 
send "\n" 

expect "Enter PostgreSQL user password (only numbers, letters and [email protected]#$%^*()_+{}|.:?=-):" 
send $passwd 
send "\n" 

expect "Retype PostgreSQL user password:" 
send $passwd 
send "\n" 

expect "Please type a selection (Press Enter to next):" 
send "\n" 

sleep 60 
#Create Keystore 
expect "What is your first and last name?" 
send $username 
send "\n" 

expect "What is the name of your organizational unit?" 
send "radisys" 
send "\n" 

expect "What is the name of your organization?" 
send "radisys" 
send "\n" 

sleep 2 
expect "What is the name of your City or Locality?" 
send "banglore" 
send "\n" 

expect "What is the name of your State or Province?" 
send "karnataka" 
send "\n" 

expect "What is the two-letter country code for this unit?" 
send "IND" 
send "\n" 

sleep 2 
expect "Is CN=raghu, OU=radisys, O=radisys, L=banglore, ST=karnataka, C=IND correct?" 
send "yes" 
send "\n" 

sleep 2 
expect "Please type a selection \[q\]:" 
send "q" 

expect eof 
+2

'login.exp'には何がありますか? – jwodder

+0

Expectは通常、パターンの出力を監視し、探しているものを検出します。 'login.exp'を見ることなく、私はそれが"ルートユーザ "を意味すると思うシェルプロンプトパターンを探していて、その特定のパターンを見ていないと思います。 –

答えて

1

ホストのルートとホストのルートは、必ずしも同じものではありません。最大の違いは、ドッカーがルートユーザーからコンテナからの脱落を防ぐためにさまざまな機能を削除するため、ユーザーがハードドライブをコンテナ内に直接マウントできる物理ハードウェアデバイスにアクセスできないこと、またはcgroupを調整することです名前空間をエスケープする設定。

実行中のファイルの名前から、ハードウェアにアクセスする必要のあるKVMをインストールしようとしているようです。私はこれがポータブル性とハードウェアからの隔離のために設計されているコンテナの最適なユースケースにはならないと考えていますが、このアプリケーションはハードウェア固有の設定とアクセスが重要な要件として設計されているようです。

docker buildではハードウェアアクセスが許可されていませんが、docker run --privilegedを手動でインストールしてからdocker commitを使用して画像に保存することができます。これは、通常、イメージを構築する最後の方法ですが、この場合は、それが可能であると仮定して、唯一の方法かもしれません。

関連する問題