Docker撰写:避免重新创build数据容器

要更新一些图片,我使用了“docker-compose pull”。 然后我build立:“docker构build”。

我只想更新应用程序容器,所以我删除了它,并重新启动:“docker-compose rm app”和“docker-compose up -d app”。

但是发生了一些不必要的事 数据容器也被重新创build。 旧的数据丢失了。

Datacontainer的Dockerfile:

FROM gitlab/gitlab-ce:latest VOLUME ["/etc/gitlab", "/var/log/gitlab", "/var/opt/gitlab"] ENTRYPOINT ["hostname"] 

泊坞窗,compose.yml:

 version: '2' services: gitlab: image: 'gitlab/gitlab-ce:latest' domainname: example.com hostname: gitlab networks: - devenv restart: always environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://gitlab.example.com' gitlab_rails['gitlab_shell_ssh_port'] = 2224 ports: - '80:80' - '2224:22' volumes_from: - gitlabdata gitlabdata: build: gitlab-data 

我下次如何避免?

docker-compose up命令有--no-recreate标志。 此标志避免重新创build容器,如果它们已经存在。

所以你可以运行

 docker-compose up -d --no-recreate app 

你的问题是因为你为一个容器创build了一个卷,然后删除了容器,这也删除了你的卷。

您应该更改卷,以便将挂载绑定到主机目录,这样您的文件就存储在主机上,并且可以在容器消失时重新挂接到这些目录。 另一个好处是能够从主机访问这些文件。

这里大概是你的撰写文件将看起来像新的音量configuration。

 version: '2' services: gitlab: image: 'gitlab/gitlab-ce:latest' domainname: example.com hostname: gitlab networks: - devenv restart: always environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://gitlab.example.com' gitlab_rails['gitlab_shell_ssh_port'] = 2224 ports: - '80:80' - '2224:22' volumes_from: - gitlabdata gitlabdata: build: gitlab-data Volumes: - /etc/gitlab:/dir/on/host - /var/log/gitlab:/dir/on/host2 - /var/opt/gitlab:/dir/on/host3 

你可以挂载到主机上你想要的东西上。 有关卷的更多信息: https : //docs.docker.com/engine/userguide/containers/dockervolumes/#mount-a-host-directory-as-a-data-volume