在这篇文章中,我们将为您详细介绍在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)
- 10.docker学习笔记之入门,docker-compose端口映射可能会导致的问题
- c# – 使用docker-compose运行docker镜像
- Docker Compose挂载Windows文件夹
- Docker Compose说$ PWD变量未设置Windows
在Windows上运行docker-compose“入门”示例会导致“无效的卷规范”(windows上使用docker)
我绝对不是Docker的新手。我遵循了Docker
Compose的“入门”教程中描述的步骤:
- 安装Docker Toolbox
- 启动Docker快速入门终端
- 添加项目文件
- 运行
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
我的配置:
- Windows 10单一语言
- 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端口映射可能会导致的问题
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#中使用我的简单应用程序与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文件夹?
我的目标是挂载
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\www
Docker Toolbox已经创建的boot2docker
VM映像安装到该映像,然后从该映像加载到其中的nginx容器。
不幸的是,它不起作用。我在boot2docker映像中找到一个文件夹sss,但是它没有指定我的Windows数据就为空。
我究竟做错了什么?在开发过程中是否有更好的做法以便在Windows上使用Docker(因此您需要在Windows,DockerVM(boot2docker)和Docker容器之间共享代码)?
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等相关知识的信息别忘了在本站进行查找喔。
本文标签: