435

Docker のInteractive チュートリアルとよ​​くある質問にもかかわらず、コンテナーが終了するとデータが失われます。

ここで説明されているように Docker をインストールしました: http://docs.docker.io/en/latest/installation/ubuntulinux ubuntu 13.04 で問題なく。

ただし、終了するとすべてのデータが失われます。

iman@test:~$ sudo docker version
Client version: 0.6.4 
Go version (client): go1.1.2 
Git commit (client): 2f74b1c 
Server version: 0.6.4 
Git commit (server): 2f74b1c 
Go version (server): go1.1.2 
Last stable version: 0.6.4 


iman@test:~$ sudo docker run ubuntu ping
2013/10/25 08:05:47 Unable to locate ping 
iman@test:~$ sudo docker run ubuntu apt-get install ping
Reading package lists... 
Building dependency tree... 
The following NEW packages will be installed: 
  iputils-ping 
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. 
Need to get 56.1 kB of archives. 
After this operation, 143 kB of additional disk space will be used. 
Get:1 http://archive.ubuntu.com/ubuntu/ precise/main iputils-ping amd64 3:20101006-1ubuntu1 [56.1 kB] 
debconf: delaying package configuration, since apt-utils is not installed 
Fetched 56.1 kB in 0s (195 kB/s) 
Selecting previously unselected package iputils-ping. 
(Reading database ... 7545 files and directories currently installed.) 
Unpacking iputils-ping (from .../iputils-ping_3%3a20101006-1ubuntu1_amd64.deb) ... 
Setting up iputils-ping (3:20101006-1ubuntu1) ... 
iman@test:~$ sudo docker run ubuntu ping
2013/10/25 08:06:11 Unable to locate ping 
iman@test:~$ sudo docker run ubuntu touch /home/test
iman@test:~$ sudo docker run ubuntu ls /home/test
ls: cannot access /home/test: No such file or directory 

インタラクティブなセッションでもテストし、同じ結果を得ました。私は何かを忘れましたか?

編集:新しいDockerユーザーにとって重要

@mohammed-noureldin や他の人が言ったように、実際にはこれはコンテナの終了ではありません。新しいコンテナを作成するたびに。

4

11 に答える 11

436

コンテナに加えた変更をコミットしてから実行する必要があります。これを試して:

sudo docker pull ubuntu

sudo docker run ubuntu apt-get install -y ping

次に、次のコマンドを使用してコンテナー ID を取得します。

sudo docker ps -l

変更をコンテナにコミットします。

sudo docker commit <container_id> iman/ping 

次にコンテナを実行します。

sudo docker run iman/ping ping www.google.com

これはうまくいくはずです。

于 2013-10-25T09:42:08.543 に答える
408

を使用docker runしてコンテナーを開始すると、実際には、指定したイメージに基づいて新しいコンテナーが作成されます。

ここでの他の有用な回答に加えて、既存のコンテナを終了した後に再起動でき、変更が残っていることに注意してください。

docker start f357e2faab77 # restart it in the background
docker attach f357e2faab77 # reattach the terminal & stdin
于 2013-10-27T09:37:59.970 に答える
143

コンテナ データを永続化するには、次の方法があります。

  1. Docker ボリューム

  2. Docker コミット

    a) ubuntu イメージからコンテナーを作成し、bash ターミナルを実行します。

       $ docker run -i -t ubuntu:14.04 /bin/bash
    

    b) ターミナル内で curl をインストールします

       # apt-get update
       # apt-get install curl
    

    c) コンテナターミナルを出る

       # exit
    

    d) 次のコマンドを実行して、コンテナ ID をメモします。

       $ docker ps -a
    

    e) コンテナを新しいイメージとして保存

       $ docker commit <container_id> new_image_name:tag_name(optional)
    

    f) curl がインストールされた新しいイメージが表示されることを確認します。

       $ docker images           
    
       $ docker run -it new_image_name:tag_name bash
          # which curl
            /usr/bin/curl
    
于 2016-05-17T08:48:38.217 に答える
62

Unferth の回答に加えて、 Dockerfileを作成することをお勧めします。

空のディレクトリに、次の内容の「Dockerfile」というファイルを作成します。

FROM ubuntu
RUN apt-get install ping
ENTRYPOINT ["ping"]

Dockerfile を使用してイメージを作成します。タグを使用して、16 進数の画像番号を覚える必要がないようにしましょう。

$ docker build -t iman/ping .

次に、コンテナーでイメージを実行します。

$ docker run iman/ping stackoverflow.com
于 2013-10-25T09:55:14.130 に答える
8

コンテナー内のデータを永続化する場合は、docker ボリュームを確認することをお勧めします。https://docs.docker.com/engine/tutorials/dockervolumes/にアクセスしてください。ドッカーのドキュメントは、開始するのに非常に適した場所です

于 2015-10-20T14:58:57.880 に答える