为了跟踪docker-compose使用的卷,我喜欢使用命名卷.这适用于"普通"卷
version: 2
services:
example-app:
volume:
-named_vol:/dir/in/container/volume
volumes:
named_vol:
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何在安装本地主机时使其工作.我正在寻找类似的东西:
version: 2
services:
example-app:
volume:
-named_homedir:/dir/in/container/volume
volumes:
named_homedir: /c/Users/
Run Code Online (Sandbox Code Playgroud)
要么
version: 2
services:
example-app:
volume:
-/c/Users/:/home/dir/in/container/ --name named_homedir
Run Code Online (Sandbox Code Playgroud)
这是以任何可能的方式,还是我坚持使用已安装的匿名卷?
docker-compose.yml规范的3.1版引入了对秘密的支持.
我试过这个:
version: '3.1'
services:
a:
image: tutum/hello-world
secret:
password: the_password
b:
image: tutum/hello-world
Run Code Online (Sandbox Code Playgroud)
$ docker-compose up 收益:
Unsupported config option for services.secret: 'password'
我们如何在实践中使用秘密功能?
docker-compose build和之间有什么区别docker build?
假设在一个dockerized项目路径中有一个docker-compose.yml文件:
docker-compose build
Run Code Online (Sandbox Code Playgroud)
和
docker build
Run Code Online (Sandbox Code Playgroud) 从 Docker 版本20.10(https://github.com/moby/moby/pull/40007)开始,有一个新的特殊字符串host-gateway,可以在--add-host运行标志中使用,以允许从 docker 容器内部直接连接到本地计算机在基于 Linux 的系统上。这非常好。
--add-host=host.docker.internal:host-gateway但是Compose 文件中的等价物是什么?
例如在:
$ docker run \
--rm \
--name postgres \
-p "5433:5432" \
-e POSTGRES_PASSWORD=**** \
--add-host=host.docker.internal:host-gateway \
-d postgres:14.1-bullseye
Run Code Online (Sandbox Code Playgroud)
相同的标志如何--add-host适合这个 Docker Compose 等效模板:
version: '3.9'
services:
postgres:
image: postgres:14.1-bullseye
environment:
POSTGRES_PASSWORD: ****
ports:
- "5433:5432"
Run Code Online (Sandbox Code Playgroud)
肯定不是:network_mode: host在服务级别(参见#Doc)。
我不知道我做错了什么,但我根本无法docker-compose up使用我们注册表中的最新图像,而无需先完全从系统中删除旧容器.看起来compose正在使用之前启动的图像,即使docker-compose pull已经获取了一个较新的图像.
我看了如何让docker-compose始终从新图像重新创建容器?这似乎与我的问题类似,但是所提供的解决方案都没有对我有用,因为我正在寻找可以在生产服务器上使用的解决方案,我不想在启动它们之前删除所有容器再次(可能的数据丢失?).我想仅仅为了检测已更改图像的新版本,拉出它们然后用这些新图像重新启动服务.
我为此创建了一个简单的测试项目,其中唯一的目标是在每个新构建上增加一个版本nr.如果我浏览到创建的nginx服务器(这在本地按预期工作),则显示版本nr.
docker版本:1.11.2 docker-compose版本:1.7.1 OS:使用docker-toolbox在CentOS 7和OS X 10.10上测试
我的docker-compose.yml:
version: '2'
services:
application:
image: ourprivate.docker.reg:5000/ourcompany/buildchaintest:0.1.8-dev
volumes:
- /var/www/html
tty: true
nginx:
build: nginx
ports:
- "80:80"
volumes_from:
- application
volumes:
- ./logs/nginx/:/var/log/nginx
php:
container_name: buildchaintest_php_1
build: php-fpm
expose:
- "9000"
volumes_from:
- application
volumes:
- ./logs/php-fpm/:/var/www/logs
Run Code Online (Sandbox Code Playgroud)
在我们的jenkins服务器上,我运行以下命令来构建和标记图像
cd $WORKSPACE && PROJECT_VERSION=$(cat VERSION)-dev
/usr/local/bin/docker-compose rm -f
/usr/local/bin/docker-compose build
docker tag ourprivate.docker.reg:5000/ourcompany/buildchaintest ourprivate.docker.reg:5000/ourcompany/buildchaintest:$PROJECT_VERSION
docker push ourprivate.docker.reg:5000/ourcompany/buildchaintest
Run Code Online (Sandbox Code Playgroud)
这似乎正在做它应该做的事情,因为每次构建完成并且版本nr被碰撞时我在我们的存储库中得到一个新的版本标记.
如果我现在跑
docker-compose pull && docker-compose -f docker-compose.yml up …Run Code Online (Sandbox Code Playgroud) 我有一个.gitlab-ci.yml文件,其中包含以下内容:
image: docker:latest
services:
- docker:dind
before_script:
- docker info
- docker-compose --version
buildJob:
stage: build
tags:
- docker
script:
- docker-compose build
Run Code Online (Sandbox Code Playgroud)
但在ci-log我收到消息:
$ docker-compose --version
/bin/sh: eval: line 46: docker-compose: not found
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我正在学习如何使用Docker Compose在多个主机上的多个容器中部署应用程序.我遇到了两个配置文件 - 堆栈文件和Compose文件.
从云堆栈文件YAML引用中,它指出堆栈文件是YAML格式的文件,它定义一个或多个服务,类似于docker-compose.yml文件但具有一些扩展名.
从这篇文章中,它指出堆栈与docker-compose非常相似,除了它们定义服务而docker-compose定义容器.
它们看起来非常相似,所以我想知道何时使用堆栈文件,何时使用Compose文件?
我已经使用命令安装了docker-compose
sudo apt install docker-compose
它安装了docker-compose版本1.8.0并构建未知
我需要最新版本的docker-compose或至少1.9.0版本
任何人都可以让我知道我应采取什么方法来升级或卸载并重新安装最新版本.
我查看了docker网站,可以看到他们建议安装最新版本'
sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
但在此之前,我必须卸载当前版本,可以使用该命令完成
sudo rm /usr/local/bin/docker-compose
但只有在使用curl完成安装时才能使用此功能.我不确定安装是否由我使用的curl完成
sudo apt install docker-compose
请让我知道我现在应该做什么来卸载并重新安装docker-compose.
我试图docker-compose通过环境变量传递我的 redis 密码,但它给了我错误。
这是我的 redis 镜像的一部分docker-compose.yml:
redis:
image: redis
container_name: redis
# command: redis-server --requirepass mypassword <--- this works as expected
# command: redis-server --requirepass ${REDIS_PASSWORD} <-- while this does not
command: redis-server --requirepass $${REDIS_PASSWORD} <-- and this does not work either
volumes:
- redis:/var/lib/redis/data
- ./redis.conf:/usr/local/etc/redis/redis.conf
ports:
- "6379"
env_file:
- .env.prod
Run Code Online (Sandbox Code Playgroud)
我的.env.prod:
REDIS_PASSWORD=mypassword
Run Code Online (Sandbox Code Playgroud)
它给了我一个错误:
consumer: Cannot connect to redis://:**@redis:6379/0: WRONGPASS invalid username-password pair or user is disabled..
Run Code Online (Sandbox Code Playgroud)
但是如果我直接在docker-compose.yml没有环境变量的情况下指定密码,那么它就可以工作。
尝试运行此命令时:
docker-compose up
我收到此错误:
Error response from daemon: user declined directory sharing C:\Users\path_to_my_folder
我正在 Windows 10 上工作