相关疑难解决方法(0)

如何使用卷在dockerized postgres数据库中保存数据

我的docker compose文件有三个容器,web,nginx和postgres.Postgres看起来像这样:

postgres:
  container_name: postgres
  restart: always
  image: postgres:latest
  volumes:
    - ./database:/var/lib/postgresql
  ports:
    - "5432:5432
Run Code Online (Sandbox Code Playgroud)

我的目标是安装一个./database与postgres容器内调用的本地文件夹相对应的卷/var/lib/postgres.当我启动这些容器并将数据插入postgres时,我验证/var/lib/postgres/data/base/了我正在添加的数据(在postgres容器中),但是在我的本地系统中,./database只获取了一个data文件夹,即./database/data创建了它,但它是空的.为什么?

笔记:

更新1

根据尼克的建议,我做了一个docker inspect并发现:

    "Mounts": [
        {
            "Source": "/Users/alex/Documents/MyApp/database",
            "Destination": "/var/lib/postgresql",
            "Mode": "rw",
            "RW": true,
            "Propagation": "rprivate"
        },
        {
            "Name": "e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35",
            "Source": "/var/lib/docker/volumes/e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35/_data",
            "Destination": "/var/lib/postgresql/data",
            "Driver": "local",
            "Mode": "",
            "RW": true,
            "Propagation": ""
        }
    ],
Run Code Online (Sandbox Code Playgroud)

这似乎是数据被另一个我自己编码的卷偷走了.不知道为什么会这样.postgres图像是否为我创建了该卷?如果是这样,当我重新启动时,是否有某种方法可以使用该卷而不是我正在安装的卷?否则,是否有一种很好的方法可以禁用其他卷并使用我自己的卷./database

更新2

我找到了解决方案,感谢尼克!(和另一位朋友)以下答案.

postgresql docker docker-compose docker-volume

166
推荐指数
4
解决办法
11万
查看次数

Mac/OS X上的/ var/lib/docker在哪里

我在为/var/lib/dockerMac安装docker之后在Mac上寻找文件夹.

随着docker info 我得到

    Containers: 5
     ...
    Server Version: 1.12.0-rc4
    Storage Driver: aufs
     Root Dir: /var/lib/docker/aufs
     Backing Filesystem: extfs
     Dirs: 339
     Dirperm1 Supported: true
    ...
    Name: moby
    ID: LUOU:5UHI:JFNI:OQFT:BLKR:YJIC:HHE5:W4LP:YHVP:TT3V:4CB2:6TUS
    Docker Root Dir: /var/lib/docker
    Debug Mode (client): false
    ....
Run Code Online (Sandbox Code Playgroud)

/var/lib/docker我的主机上没有目录.

我已经检查/Users/myuser/Library/Containers/com.docker.docker/但在那里找不到任何东西.知道它在哪里吗?

macos docker docker-for-mac

110
推荐指数
7
解决办法
4万
查看次数

Docker-撰写持久性数据问题

我在配置持久数据方面遇到了麻烦Mariadb.我正在使用docker-compose,将每个服务放在一个容器中(Nginx,PHP-FPMMariadb).除了Mariadb不存储数据外,一切正常.每次重新启动容器时,都会丢失所有数据.然后我发现我可以使用另一个容器来保存数据,甚至不必运行.

所以我在Mariadb容器volume_from内容容器中使用.但是当我这样做时,当我尝试映射卷时/var/lib/mysql,Container MariaDb无法启动.

错误

2015-12-29 12:16:40 7f2f02e4a780
InnoDB:文件操作中的操作系统错误号13.
InnoDB:错误意味着mysqld没有对
InnoDB 的访问权限:目录.

该错误是指有关卷权限的问题,但我尝试Dockerfile在两个容器中设置权限,问题仍然存在.我有点迷茫.我正在使用OSX,所以我认为这是一个OSX问题.谁可以帮我这个事?

这是我的代码:

我的Docker撰写

content:
  build: containers/content
  container_name: content
  hostname: content
  volumes:
    - /var/lib/mysql
mariadb:
  build: containers/mariadb
  container_name: mariadb
  hostname: mariadb
  ports:
    - "3306:3306"
  volumes_from:
    - content
  environment:
    - MYSQL_ROOT_PASSWORD=mariadb
    - TERM=xterm
    - PORT=3306

MariaDB Dockerfile

FROM debian:jessie

RUN apt-get update && apt-get install -y  mariadb-server

EXPOSE 3306

内容Dockerfile …

macos mariadb docker docker-compose

6
推荐指数
1
解决办法
3662
查看次数

将 Docker 用于多个 php 应用程序

我最近从 Wamp(wampserver)搬到了 Docker(Windows 主机)。使用 wamp 时,我能够拥有多个项目,例如以下文件结构

- wamp64
  - www/
    - project1/ 
    - project2/
    - ....
Run Code Online (Sandbox Code Playgroud)

在 wamp 的 Apache 上,我定义了几个虚拟主机,所有项目都使用 wamp 的数据库,每个都有自己的架构。

因此,在必要时通过访问类似 url或相应的虚拟主机来切换上下文从project1project2project3等是很常见的http://localhost/projectX

正如我目前所见,这在 Docker 上似乎并不那么简单。我的第一个方法是在每个项目上设置一个不同的 Docker

- www/
  - project1/
       - dockerfile & docker-compose
  - project2/
       - dockerfile & docker-compose
  - projectX/
       - dockerfile & docker-compose
- data // this is where mysql data lie
Run Code Online (Sandbox Code Playgroud)

我认为,与我习惯使用 wamp 的相比,这似乎不太有效,因为每次我想更改上下文时,我都必须使用docker-compose stop我当前正在工作docker-compose up的项目和我想切换到的项目,反之亦然.

我尝试了另一种方法,在单个 apache-php 容器(整个 www 文件夹)中运行所有项目 …

php lamp docker docker-compose

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

Django - Mysql数据库不是在Docker中创建的

我在docker容器中设置了一个django项目,并且每个东西都按预期工作,除了我在mysql映像中找不到项目数据库.

Dockerfile

FROM python:3

RUN mkdir /django-website
WORKDIR /django-website
COPY . /django-website
RUN pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

泊坞窗,compose.yml

version: '3'

services:
    db:
        image: mysql:5.7
        restart: always
        environment:
            - MYSQL_ROOT_PASSWORD=root
            - MYSQL_DATABASE=mywebsite
            - MYSQL_USER=root
            - MYSQL_PASSWORD=root
        ports:
            - '33060:3306'
        volumes:
            - /var/lib/mysql
    web:
        build: .
        command: python manage.py runserver 0.0.0.0:8000
        volumes:
            - .:/django-website
        ports:
            - '8000:8000'
        links:
            - db
Run Code Online (Sandbox Code Playgroud)

settings.py

DATABASES = {
    'default': {
        'ENGINE': "django.db.backends.mysql",
        'NAME': "mywebsite",
        'USER': "root",
        'PASSWORD': "root",
        'HOST': 'db',
        'PORT': '3306',
    }
}
Run Code Online (Sandbox Code Playgroud)

我运行迁移,它工作:

docker-compose …
Run Code Online (Sandbox Code Playgroud)

mysql django docker dockerfile docker-compose

4
推荐指数
1
解决办法
880
查看次数

MySQL-workbench 和 Docker 无法连接到“127.0.0.1”上的 MySQL 服务器 (61)

Om Mac 我在本地网络上使用 docker,我想使用 MySQL-workbench 访问 mysql,但是在安装 MySQL-workbench 并尝试连接到数据库后,我收到此错误消息

\n\n
Can\'t connect to MySQL server on \'127.0.0.1\' (61)\n
Run Code Online (Sandbox Code Playgroud)\n\n

图像

\n\n

我尝试为 docker 寻找解决方案,但没有找到任何解决方案。

\n\n

docker 检查 pkbook_mysql_1

\n\n
"NetworkSettings": {\n            "Bridge": "",\n            "SandboxID": "cb984bedd303958298621c1571482c7c06a2a326df021902c15a7955b8c26b2c",\n            "HairpinMode": false,\n            "LinkLocalIPv6Address": "",\n            "LinkLocalIPv6PrefixLen": 0,\n            "Ports": {\n                "3306/tcp": null\n            },\n            "SandboxKey": "/var/run/docker/netns/cb984bedd303",\n            "SecondaryIPAddresses": null,\n            "SecondaryIPv6Addresses": null,\n            "EndpointID": "",\n            "Gateway": "",\n            "GlobalIPv6Address": "",\n            "GlobalIPv6PrefixLen": 0,\n            "IPAddress": "",\n            "IPPrefixLen": 0,\n            "IPv6Gateway": "",\n            "MacAddress": "",\n            "Networks": {\n                "publiquip_default": {\n                    "IPAMConfig": null,\n                    "Links": null,\n                    "Aliases": [\n                        "mysql",\n                        "ee6b2dd46fb8"\n                    ],\n …
Run Code Online (Sandbox Code Playgroud)

mysql-workbench docker

4
推荐指数
1
解决办法
7647
查看次数

Docker Compose:避免重新创建数据容器

为了更新一些图像,我使用了“docker-compose pull”。然后我构建:'docker-compose build'。

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

但是发生了一些不希望的事情。数据容器也被重新创建。旧数据丢失。

用于数据容器的 Dockerfile:

FROM gitlab/gitlab-ce:latest
VOLUME ["/etc/gitlab", "/var/log/gitlab", "/var/opt/gitlab"]
ENTRYPOINT ["hostname"]
Run Code Online (Sandbox Code Playgroud)

docker-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
Run Code Online (Sandbox Code Playgroud)

下次我怎样才能避免这种情况?

docker docker-compose

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