相关疑难解决方法(0)

如何在映像更改后升级docker容器

假设我已经取消了正式的mysql:5.6.21图像.

我通过创建几个docker容器来部署此映像.

这些容器已运行一段时间,直到MySQL 5.6.22发布.mysql的官方形象:5.6使用新版本更新,但我的容器仍然运行5.6.21.

如何将图像中的更改(即升级MySQL发行版)传播到我现有的所有容器?Docker的正确方法是什么?

docker

481
推荐指数
9
解决办法
39万
查看次数

管理Docker共享卷权限的(最佳)方法是什么?

我一直在玩Docker一段时间,并在处理持久数据时继续寻找相同的问题.

创建我Dockerfile暴露量或使用--volumes-from安装我的容器内的主文件夹.

我应该对主机上的共享卷应用哪些权限?

我可以想到两个选择:

  • 到目前为止,我已经给了每个人读/写访问权限,所以我可以从Docker容器写入该文件夹.

  • 将用户从主机映射到容器,这样我就可以分配更细化的权限.不确定这是可能的,但没有找到太多关于它.到目前为止,我所能做的就是以某个用户身份运行容器:docker run -i -t -user="myuser" postgres但是此用户的UID与我的主机不同myuser,因此权限不起作用.此外,我不确定映射用户是否会带来一些安全风险.

还有其他选择吗?

你们这些人/女士如何应对这个问题?

docker

328
推荐指数
9
解决办法
23万
查看次数

如何将PostgreSQL容器与现有数据一起使用?

我正在尝试设置PostgreSQL容器(https://hub.docker.com/_/postgres/).我有一些来自当前PostgreSQL实例的数据.我将其复制/var/lib/postgresql/data并希望将其设置为PostgreSQL容器的卷.

我是关于PostgreSQL的docker-compose.yml文件的一部分:

db:
    image: postgres:9.4
    ports:
        - 5432:5432
    environment:
        POSTGRES_PASSWORD: postgres
        POSTGRES_USER: postgres
        PGDATA : /var/lib/postgresql/data
    volumes:
        - /projects/own/docker_php/pgdata:/var/lib/postgresql/data
Run Code Online (Sandbox Code Playgroud)

当我做docker-compose时,我收到这条消息:

db_1  | initdb: directory "/var/lib/postgresql/data" exists but is not empty
db_1  | If you want to create a new database system, either remove or empty
db_1  | the directory "/var/lib/postgresql/data" or run initdb
db_1  | with an argument other than "/var/lib/postgresql/data".
Run Code Online (Sandbox Code Playgroud)

我试图从容器中创建自己的图像,所以我的Dockerfile是:

FROM postgres:9.4
COPY pgdata /var/lib/postgresql/data
Run Code Online (Sandbox Code Playgroud)

但是我得到了同样的错误,我做错了什么?

更新

我使用pg_dumpall获取SQL并将其放在/docker-entrypoint-initdb.d中,但每次执行此文件都会执行docker-compose up.

postgresql docker

38
推荐指数
2
解决办法
3万
查看次数

在docker中的容器之间共享数据库的最佳做法是什么?

有没有人知道在docker中容器之间共享数据库的最佳做法是什么?

我的意思是我想在docker中创建多个容器.然后,这些容器将在具有相同标识的同一数据库上执行CRUD.

到目前为止,我有两个想法.一个是创建一个单独的容器来运行数据库.另一个是直接在安装了docker的主机上安装数据库.

哪一个更好?或者,这个要求还有其他最佳实践吗?

谢谢

docker

18
推荐指数
3
解决办法
1万
查看次数

Docker设置

这天我正在阅读很多关于Docker的内容,我甚至试图在Vagrant的笔记本电脑上运行它.但我仍然不清楚为什么,特别是如何将它介绍给我的团队.只是我没有看到用例.

据我所知,您可以为Web服务器和数据库创建容器.所以你现在可以说嘿,我们正在使用我创建的custom-tomcat-1.0和custom-mysql-1.4容器.到目前为止这么清楚.我遇到的问题是那些"数据容器".

我仍然能够以某种方式理解我将DB-data-1.4与DB容器的数据文件一起更新到当前模式,我可以使用我的deployables的WEB-app-3.5,它将以某种方式与DB数据图像对应.

那个java怎么样?如果我有java DB,我需要在所有使用它的容器上安装JVM吗?

到目前为止有任何意义吗?现在有几件事我没有清楚地看到他们的位置.

  1. 开发商如何在当地工作呢?他将创建一些WEB-app图像快照并启动它?或者以某种方式将跳过WEB-app图像的使用,并以某种方式将构建文件直接提供给服务器映像?

  2. 有了jenkins,我想它会从git下载代码.构建它并创建一些WEB-app图像快照.开始一切.现在我可以运行一些集成测试,以某种方式从外部使用应用程序,但是如何?

基本上有两个问题:如何使用docker在本地开发,以及如何执行集成测试.我需要真实的用例,所以我可以看到它的大局.我们正在使用maven,java,spring,sql db,jenkins,junit.

java containers development-environment docker

10
推荐指数
1
解决办法
392
查看次数

在微服务架构中使用共享数据库docker容器

docker我标记的问题计数中假设StackOverflow是正确的地方(而不是例如DevOps),如果没有,请指出我正确的地方或相应地移动这个问题.

我的方案如下:

  • 正在根据SOA /微服务方法开发包含前端(Web GUI)和后端(REST服务)的多个应用程序,每个应用程序都有自己的git存储库
  • 某些应用程序需要共享的附加资源,如前端需要HTTP服务器,而多个后端应用程序需要数据库服务器(具有持久存储)
  • 重点主要是离线移动开发(在路上),因此应该可以快速设置所需的服务/应用程序,并且资源开销的数量应该是最小的.但当然整个事情将在某个时候部署/发布,所以如果两者都可以管理,我不想阻止它
  • 开发是在Windows和Linux主机上完成的
  • 出于开发目的,需要从主机访问所有服务

我想要实现的是docker-compose.yaml在我调用的应用程序存储库中有一个文件,docker-compose up然后启动所有必需的容器(如果尚未运行),例如,当我docker-compose up在后端应用程序存储库中调用时启动数据库容器.

我的方法是创建一个新的git存储库,它定义所有共享的docker镜像/容器,并且docker-compose.yaml只有docker-compose build在发生变化时才能运行所有开发人员(可能在将来使用git commit hook自动化).中央docker-compose.yaml看起来像这样

version: "3"
services:

  postgres:
    build: ./images/postgres
    image: MY-postgres
    container_name: MY-postgres-server
    ports:
      - "5432:5432"

  httpd:
    build: ./images/httpd
    image: MY-httpd
    container_name: MY-httpd-server
    ports:
      - "80:80"
Run Code Online (Sandbox Code Playgroud)

Dockerfile和描述每个图像内置如何在自己的子文件夹,我认为不相关的问题,基本上是默认的图像高山+阿帕奇/ Postgres的.

所以问题是:docker-compose.yaml应用程序git存储库中的内容如何引用上述中心定义的服务/容器docker-compose.yaml.

现在,因为这 没有 新的 问题 情景,我做了一些研究和诚实的各种方法,并提出了解决方案令人困惑,这一次的各种版本中不提倡使用的和兼容性,功能等.

linux windows development-environment docker docker-compose

7
推荐指数
0
解决办法
840
查看次数

如何为 Docker 主机上的卷挂载点指定 userid 和 groupid

我对这个问题感到沮丧有一段时间了,因为这里已经多次询问这个问题,例如在如何处理 Docker 中的持久存储(例如数据库)什么是管理 Docker 共享卷的权限的(最佳)方法?,但答案根本没有解决问题。

第一个“答案”说只使用named volumes而不是传统的bind mounts. 这解决不了任何问题,因为当命名卷安装在主机上时,例如在默认位置/var/lib/docker/volumes/<volume name>/_data,那么该安装点将具有容器内安装点的uid/ 。gid

在 docker 命名卷之前给出的另一个“答案”是使用纯数据容器。这展示了同样的问题。

这对我来说是一个巨大的问题,因为我有很多嵌入式机器,我想在其中运行 docker 主机,并且用户在每台机器上可能有不同的uid/ 。gid因此,我无法在 Dockerfile 中对持久卷的挂载点硬编码uid/来实现匹配。gidid

这是问题的一个示例:假设我的用户foo位于主机上,具有uid 1001gid 1001,并且将文件写入容器内的卷的用户具有uid 1002。当我运行容器时,docker将chown 1002:1002在主机上安装点目录,并用它写入文件uid,我什至无法用我的用户读取/写入文件foo

视觉上(主机上的所有这些操作):

$ docker volume create --driver local --opt type=volume --opt device=/home/<my_host_user>/logs --opt o=bind logs
logs
$ docker volume inspect logs …
Run Code Online (Sandbox Code Playgroud)

permissions containers file-permissions docker docker-volume

7
推荐指数
1
解决办法
6042
查看次数

docker 仅数据容器的持久性如何

我对纯数据 Docker 容器有点困惑。我读到将目录直接安装到源操作系统是一种不好的做法:https://groups.google.com/forum/#!msg/docker- user/EUndR1W5EBo/4hmJau8WyjAJ

我了解如何制作仅数据容器:http://container42.com/2014/11/18/data-only-container-madness/

我看到了一些与我类似的问题:How to deal with permanent storage (eg Databases) in docker

但是,如果我有一个灯服务器设置......并且我对数据容器进行了一切不错的设置,而不是将它们“直接”链接到我的源操作系统并每隔一段时间进行备份......

比有人过来并重新启动我的服务器..如何再次设置我的docker(仅数据)容器,这样我就不会丢失任何数据?

docker

5
推荐指数
1
解决办法
856
查看次数

使用Docker容器设计系统架构

我是Docker的新手.我想要一些专家关于容器设计的意见.我在MongoDB云(Atlas)中建立了一个数据库.我在Docker容器中有Windows应用程序,包括Windows操作系统和基于应用程序的组件.我想使用RavenDB,这个数据库对我来说很新.我的Windows容器的一个组件将与MongoDBRavenDB进行通信.我的问题是我应该为RavenDB创建不同的docker容器,还是在现有的windows容器中安装RavenDB.这是设计决策问题.我是RavenDBDocker的新手,所以我的利弊还不清楚.请帮助我.

mongodb ravendb docker

2
推荐指数
1
解决办法
95
查看次数