适用于Mac和mkdir渗透的Docker

时间:2019-04-29 15:50:14

标签: docker docker-compose dockerfile docker-for-mac postgis-installation

为Mac应用程序使用docker。昨天刚刚安装了所有东西。终于让应用程序运行了。 但是在安装postgis之前,我无法运行迁移。因此,我删除了postgis:11-alpine映像的官方postgres dockerhub映像。但是当docker尝试为pg_data卷创建mkdir时,我仍然遇到权限被拒绝的问题。

Dockerfile:

        version: '3'

    # Containers we are going to run
    services:
      # Our Phoenix container
      phoenix:
        # The build parameters for this container.
        build:
          # Here we define that it should build from the current directory
          context: .
        environment:
          # Variables to connect to our Postgres server
          PGUSER: postgres
          PGPASSWORD: postgres
          PGDATABASE: gametime_dev
          PGPORT: 5432
          # Hostname of our Postgres container
          PGHOST: db
        ports:
          # Mapping the port to make the Phoenix app accessible outside of the container
          - "4000:4000"
        depends_on:
          # The db container needs to be started before we start this container
          - db
          - redis

      redis:
        image: "redis:alpine"
        ports:
          - "6379:6379"
        sysctls:
          net.core.somaxconn: 1024

      db:
        # We use the predefined Postgres image
        image: mdillon/postgis:11-alpine
        environment:
          # Set user/password for Postgres
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres
          # Set a path where Postgres should store the data
          PGDATA: /var/lib/postgresql/data/pgdata
        restart: always
        volumes:
          - pgdata:/usr/local/var/postgres_data
    # Define the volumes
    volumes:
      pgdata:

我遇到的错误:

db_1       | mkdir: can't create directory '/var/lib/postgresql/data/pgdata': Permission denied

虽然使用postgres(官方)图像时不会发生这种情况。我高低谷歌搜索。我确实读过一些有关Docker for Mac的信息,这些信息是它在VM中创建的容器上运行命令的,该容器是当前用户的localhost用户而不是root用户。但这对我来说没有意义-如果是这种情况,我该如何解决?

[特别注意:]-我确实尝试了:z和:Z-仍然遇到与上述完全相同的错误。

提前知道时间。

1 个答案:

答案 0 :(得分:2)

您在db服务状态下使用的环境变量PGDATA处于/var/lib/postgresql/data/pgdata,但是您正在在/usr/local/var/postgres_data的容器中装入pgdata卷。

我的猜测是,当postgres启动时,它正在查看环境变量,并期望/var/lib/postgresql/data/pgdata中的目录。由于它可能不存在,因此它试图以无权执行此操作的postgres用户身份创建它。

对两个变量使用相同的路径,我很确定它将解决该错误。