GVKun编程网logo

在Windows上运行docker-compose“入门”示例会导致“无效的卷规范”(windows上使用docker)

21

在这篇文章中,我们将为您详细介绍在Windows上运行docker-compose“入门”示例会导致“无效的卷规范”的内容,并且讨论关于windows上使用docker的相关问题。此外,我们还会涉及一

在这篇文章中,我们将为您详细介绍在Windows上运行docker-compose“入门”示例会导致“无效的卷规范”的内容,并且讨论关于windows上使用docker的相关问题。此外,我们还会涉及一些关于10.docker学习笔记之入门,docker-compose端口映射可能会导致的问题、c# – 使用docker-compose运行docker镜像、Docker Compose挂载Windows文件夹、Docker Compose说$ PWD变量未设置Windows的知识,以帮助您更全面地了解这个主题。

本文目录一览:

在Windows上运行docker-compose“入门”示例会导致“无效的卷规范”(windows上使用docker)

在Windows上运行docker-compose“入门”示例会导致“无效的卷规范”(windows上使用docker)

我绝对不是Docker的新手。我遵循了Docker
Compose的“入门”教程中描述的步骤:

  1. 安装Docker Toolbox
  2. 启动Docker快速入门终端
  3. 添加项目文件
  4. 运行docker-compose up命令

我得到以下错误:

ERROR: for web  Cannot create container for service web: Invalid bind mount spec "D:\\Projects\\composetest:/code:rw": Invalid volume specification: ''D:\Projects\composetest:/code:rw''[31mERROR[0m: Encountered errors while bringing up the project.

docker-compose.yml:

version: ''2''services:  web:    build: .    ports:     - "5000:5000"    volumes:     - .:/code:rw  redis:    image: "redis:alpine"

项目结构:

D:\Projects\composetest  ├── app.py  ├── docker-compose.yml  ├── Dockerfile  └── requirements.txt

我的配置:

  1. Windows 10单一语言
  2. Docker工具箱1.12.5

为什么会发生?有一些解决方法吗?

答案1

小编典典

我找到了解决方案。问题是我没有设置环境变量COMPOSE_CONVERT_WINDOWS_PATHS。CLI变量doc中对此进行了描述。

因此,如果存在此问题,则应创建名为的新Windows环境变量COMPOSE_CONVERT_WINDOWS_PATHS并将其设置为1。或者,您可以.env在路径docker-compose.yml中放置以下内容的位置创建文件:

 COMPOSE_CONVERT_WINDOWS_PATHS=1

它将解决此问题。

10.docker学习笔记之入门,docker-compose端口映射可能会导致的问题

10.docker学习笔记之入门,docker-compose端口映射可能会导致的问题

docker run的时候如果用上了-p或者docker-compose up -d 的时候用了ports:,那么就存在端口映射,在配置主从的时候,监听公网的其他端口如:

这个时候需要配置从节点真实公网映射的地址和端口

# slave-announce-ip 5.5.5.5
# slave-announce-port 1234

哨兵真实公网映射地址和端口

# sentinel announce-ip <ip>
# sentinel announce-port <port>

集群真实公网映射地址和端口

# cluster-announce-ip <ip> #地址
# cluster-announce-port <port> #数据端口
# cluster-announce-bus-port <port> #节点通信端口

可以配合sh脚本和docker-compose 来达到动态修改的效果

docker-compose.yaml

version: "3.6"
#设置网络环境
networks:
    #引用外部预先定义好的网段
    redis-network:
        external:
            name: redis-network
services:
    sentinel-1:
        image: redis
        container_name: sentinel-1
        ports:
            - "26386:26379"
        networks:
            redis-network:
                ipv4_address: 192.168.1.14
        volumes:
            - "/usr/docker/08/sentinel-1:/usr/src/redis"
        environment: #环境变量
            - REALIP=XXX.XXX.XXX.XXX 
            - REALPORT=26386
        command: ["redis-sentinel","/usr/src/redis/conf/sentinel.conf"]
        entrypoint: #执行
            - /bin/sh
            - /usr/src/sh/redis.sh
        privileged: true  #特殊权限
        working_dir: /usr/src/redis #工作目录
        stdin_open: true  #打开标准输入
        tty: true  #模拟伪终端

redis.sh

echo " slave-announce-ip $REALIP
       slave-announce-port $REALPORT " >> /usr/src/redis/conf/redis.conf
redis-server /usr/src/redis/conf/redis.conf
 

生成redis docker的Dockerfile

FROM alpine
RUN sed -i ''s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g'' /etc/apk/repositories \
  && apk add  gcc g++ libc-dev  wget vim  openssl-dev make  linux-headers \
  && rm -rf /var/cache/apk/*

#通过选择更小的镜像,删除不必要文件清理不必要的安装缓存,从而瘦身镜像
#创建相关目录能够看到日志信息跟数据跟配置文件
RUN mkdir -p /usr/src/redis \
      && mkdir -p /usr/src/redis/data \
      && mkdir -p /usr/src/redis/conf \
      && mkdir -p /usr/src/sh         \
      && mkdir -p /usr/src/redis/log   \
      && mkdir -p /var/log/redis
RUN wget  -O /usr/src/redis/redis-4.0.11.tar.gz  "http://download.redis.io/releases/redis-4.0.11.tar.gz" \
   && tar -xzf /usr/src/redis/redis-4.0.11.tar.gz  -C /usr/src/redis \
   && rm -rf /usr/src/redis/redis-4.0.11.tar.tgz

RUN cd /usr/src/redis/redis-4.0.11 &&  make && make PREFIX=/usr/local/redis install \
&& ln -s /usr/local/redis/bin/*  /usr/local/bin/  && rm -rf /usr/src/redis/redis-4.0.11

COPY ./redis/sh/redis.sh   /usr/src/sh
RUN  chmod +x  /usr/src/sh/redis.sh


 

c# – 使用docker-compose运行docker镜像

c# – 使用docker-compose运行docker镜像

我在C#中使用我的简单应用程序与postgresql连接.
我想用这个应用程序创建图像,然后用docker运行.

我使用时一切正常:

$docker build
$docker run postgres
$docker run my_app

另外,当我从应用程序目录使用compose时,一切都还可以:

$docker-compose build
$docker-compose up

但有没有机会使用docker-compose为我之前建立的图像?

我想将此图像发布到我的仓库,我的团队中的其他人只需下载并运行此图像(应用程序数据库).

当我进行compose-build和next compose运行my_app时,我在连接数据库时遇到异常:

dbug: Npgsql.NpgsqlConnection[3]
      opening connection to database 'POSTGRES_USER' on server 'tcp://postgres:5432'.

Unhandled Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.AggregateException: One or more errors occurred. (No such device or address) ---> System.Net.Internals.socketExceptionFactory+ExtendedSocketException: No such device or address

我当前的docker-compose.yml文件:

version: '2'

services:

  web:
    container_name: 'postgrescoreapp'
    image: 'postgrescoreapp'
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/var/www/postgrescoreapp
    ports:
     - "5001:5001"
    depends_on:
     - "postgres"
    networks:
      - postgrescoreapp-network

  postgres:
    container_name: 'postgres'
    image: postgres
    environment:
      POSTGRES_PASSWORD: password
    networks:
      - postgrescoreapp-network

networks:
  postgrescoreapp-network:
    driver: bridge

解决方法:

您应该使用以下名称构建映像:(registryName:RegistryPort)/ imagename:version

$docker build -t myRegistry.example.com:5000/myApp:latest .
$docker build -t myRegistry.example.com:5000/myDb:latest .

现在将这些行添加到docker-compose文件中:

Myapp:                                                    
  image: myRegistry.example.com:5000/myApp:latest 

MyDb:                        
  image: myRegistry.example.com:5000/myDb:latest

然后推它:

$docker push myRegistry.example.com:5000/myApp:latest
$docker push myRegistry.example.com:5000/myDb:latest

你的伙伴现在应该能够拉它

$docker pull myRegistry.example.com:5000/myApp:latest
$docker pull myRegistry.example.com:5000/myDb:latest

Docker Compose挂载Windows文件夹

Docker Compose挂载Windows文件夹

如何解决Docker Compose挂载Windows文件夹?

我的目标是挂载C:\data\www到boot2docker VM映像

从“ 手动共享目录作为Docker卷安装点 ”:

你需要:

  • 修改您的VirtualBox VM(确保先停止它):

    VBoxManage sharedfolder add <machine name/id> --name <mount_name> --hostpath <host_dir> --automount
    

    in your case

    /c/Program\ Files/Oracle/VirtualBox/VBoxManage.exe sharedfolder add default –name www –hostpath ‘C:\data\ww’ –automount

  • 向您的boot2docker VM添加自动挂载:

    • 编辑/创建(如root/mnt/sda1/var/lib/boot2docker/bootlocal.sh,(sda1可能与您不同)
    •     mkdir -p <local_dir>
      

      mount -t vBoxsf -o defaults,uid=id -u docker,gid=id -g docker <local_dir

解决方法

我在Windows中使用Docker Toolbox,并尝试将Windows文件夹安装在docker-compose.yml文件中,如下所示:

nginx:
  image: nginx:latest
  container_name: test_server
  ports:
    - "80:80"
  volumes:
    - /sss:/c/data/www:ro
  environment:
    - VIRTUAL_HOST=test.local

我的目标是将C:\data\wwwDocker Toolbox已经创建的boot2docker
VM映像安装到该映像,然后从该映像加载到其中的nginx容器。

不幸的是,它不起作用。我在boot2docker映像中找到一个文件夹sss,但是它没有指定我的Windows数据就为空。

我究竟做错了什么?在开发过程中是否有更好的做法以便在Windows上使用Docker(因此您需要在Windows,DockerVM(boot2docker)和Docker容器之间共享代码)?

Docker Compose说$ PWD变量未设置Windows

Docker Compose说$ PWD变量未设置Windows

您需要使用${PWD}而不是{$PWD}。您也可以使用点.代替${PWD}

,

为了在运行时与Docker容器共享Windows文件夹,您首先需要在Shared Drives中配置Docker settings选项:

Right click on docker app > Settings > Shared drives > Check D:

然后.${PWD}应该可以撰写:

volumes:
    - ./data:/usr/share/data/

关于在Windows上运行docker-compose“入门”示例会导致“无效的卷规范”windows上使用docker的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于10.docker学习笔记之入门,docker-compose端口映射可能会导致的问题、c# – 使用docker-compose运行docker镜像、Docker Compose挂载Windows文件夹、Docker Compose说$ PWD变量未设置Windows等相关知识的信息别忘了在本站进行查找喔。

本文标签: