在使用以下方式部署此撰写文件的堆栈时:
docker stack deploy -c docker-compose.yml myapp
service-name:
image: service-image
namelike-property: my-custom-service-name // here I would like to know the property
Run Code Online (Sandbox Code Playgroud)
生成的服务名称将为myapp_service-name
我希望它由my-custom-service-name命名和引用
我已经为构建和部署创建了作业.
作业运行正常,没有错误,项目已成功部署.
问题是虽然存储库已更改,但在浏览器中测试时,构建未显示更改,尽管工作区已成功提取带有更改的最新代码.
很少尝试解决方案
使得docker镜像构建不使用缓存
在开始构建之前使工作区清晰
似乎没什么用.哪里可能出错了.
我的项目结构:
项目目录: 哪个将包含所有laravel项目
Dockerfile: 构建映像
docker-compose.yml: 在docker 堆栈中部署服务
我正在使用docker stack deploy命令在docker stack中运行该服务
我试图删除以前构建的docker堆栈.通过buildID命名docker stack unique并重新创建一个新堆栈,但它也没有解决.
在尝试删除堆栈并再次生成时.我遇到了这个问题.
Failed to remove network 7bkf0kka11s08k3vnpfac94q8: Error response from daemon: rpc error: code = FailedPrecondition desc = network 7bkf0kka11s08k3vnpfac94q8 is in use by task lz2798yiviziufc5otzjv5y0gFailed to remove some resources from stack: smstake43
Run Code Online (Sandbox Code Playgroud)
这是用于构建jenkins作业的bash脚本
#!/bin/sh
docker build -t smstake:latest .
docker stack deploy -c docker-compose.yml smstake
Run Code Online (Sandbox Code Playgroud) 我正在整理一个docker-compose.yml文件来为我正在进行的项目运行多个服务.该项目有一个Magento和Wordpress网站,位于同一个域下,"同一域"方面需要一个非常简单的nginx容器来将请求路由到任一服务.
所以我将这个架构设计为4个容器(可视化):
mysql:5.6,其中安装了init db dumps /docker-entrypoint-initdb.d.nginx:alpine自定义配置的"路由器"容器/etc/nginx/nginx.conf.这用作反向代理,设置了两个位置指令.location /到"magento"的location /blog路线,以及到"wordpress"的路线.我想保持简单并避免构建不必要的自定义图像,但在"路由器"的上下文中,我不确定我所做的是最好的方法,或者如果作为项目特定的图像更好.
我倾向于当前将自定义配置安装到nginx:alpine容器中的方法,因为配置特定于正在运行的堆栈 - 作为单个独立容器没有意义.
所以这两种方法,没有自定义图像我们有以下内容 docker-compose.yml
router:
image: nginx:alpine
networks:
- projectnet
ports:
- "80:80"
volumes:
- "./router/nginx.conf:/etc/nginx/nginx.conf"
Run Code Online (Sandbox Code Playgroud)
否则,我们有一个Dockerfile包含以下内容,正如我在互联网和其他StackOverflow响应中看到的那样.
FROM nginx:alpine
ADD nginx.conf /etc/nginx/
Run Code Online (Sandbox Code Playgroud)
有没有人支持/反对这两种方法?
我创建 docker-compose.yml 的最初原因是为了利用诸如build:和depends-on:制作一个文件来构建我的所有图像并在容器中运行它们。但是,我注意到版本 3 贬低了大多数这些函数,我很好奇为什么我会使用它来构建 shellscript。
这是当前运行我所有容器的 shellscript(我假设这是版本 3 docker-compose 文件将替换的内容,如果我要使用它):
echo "Creating docker network net1"
docker network create net1
echo "Running api as a container with port 5000 exposed on net1"
docker run --name api_cntr --net net1 -d -p 5000:5000 api_img
echo "Running redis service with port 6379 exposed on net1"
docker run --name message_service --net net1 -p 6379:6379 -d redis
echo "Running celery worker on net1"
docker run --name celery_worker1 --net net1 -d celery_worker_img …Run Code Online (Sandbox Code Playgroud) 谁能解释一下 Docker Compose YML 文件是什么?我想做的就是能够控制各个容器的IP地址。我正在使用版本 3.1(但也尝试过 3.3,因为我最近升级到版本 17.06)。文档说:
A full example:
ipam:
driver: default
config:
- subnet: 172.28.0.0/16
Note: Additional IPAM configurations, such as gateway, are only honored for version 2 at the moment.
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我需要在检查网络时尊重该子网。然而,网关完全不同[请阅读上面的注释],因此容器不会启动。为什么他们在版本 3 中失去了(目前)在版本 2 中有效的功能?更糟糕的是,为什么在 3.2 或 3.3 版本中没有恢复这一点?
也许我在这里离基地很远——当然不是第一次!对我来说最重要的是:有没有办法修改撰写文件以允许命令docker stack deploy(在 a 中Docker Swarm)提供对所使用的网关和子网的控制?
我创建了一个 docker 堆栈来部署到集群。现在我\xc2\xb4m有点困惑将其部署到真实服务器的正确方法是什么样的?
\n\n当然,我可以
\n\nscp我的docker-stack.yml文件到我的集群的一个节点ssh进入节点docker stack deploy -c docker-stack.yml stackname所以就有了docker-machine我想到的工具。\n我尝试过
docker-machine -d none --url=tcp://<RemoteHostIp>:2375 node1\nRun Code Online (Sandbox Code Playgroud)\n\n只有在没有 TLS 的情况下打开端口时,什么才有效?\n我收到以下内容:
\n\n$ docker-machine env node1\nError checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host "192.168.178.49:2375": dial tcp 192.168.178.49:2375: connectex: No connection could be made because the target machine actively refused it.\nYou can attempt to regenerate …Run Code Online (Sandbox Code Playgroud) 我有一个像下面这样的docker-compose.yml:
networks:
smstake:
ipam:
config:
- subnet: 10.0.10.0/24
services:
app:
image: smstake:latest
ports:
- 8000:80
networks:
- smstake
depends_on:
- db
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
Run Code Online (Sandbox Code Playgroud)
我正在使用它在以群集模式运行的节点中部署服务。
每次构建映像时,映像名称可能会根据用户传递的用作映像标签的分支名称或标记名而有所不同。我正在从詹金斯那里运行它。例如:
如何将图像名称动态添加到服务的图像参数。由于docker stack不支持构建。我什至不能使用它。我无法找出正确的方法。
我正在尝试与 docker stack deploy -c docker-compose.yml stackname
我的确切要求是:
为新的TAG创建新映像的原因是,我可以回滚到以前生成的映像。
进行一些编辑: 添加了映像名称以添加到configuration.env文件中,该文件将在部署命令运行之前在部署作业中使用echo命令传递。比docker-compose看起来像以下
version: '3.4'
networks:
smstake:
services:
db:
image: mysql:5.7
networks:
- smstake
ports:
- "3306"
env_file:
- configuration.env
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASSWORD}
volumes:
- mysql_data:/var/lib/mysql …Run Code Online (Sandbox Code Playgroud) 我正在从Docker Cloud迁移到纯粹的Docker Swarm设置.我遗漏的一件事是容器如何将主机名设置为$ SERVICE_NAME- $ SLOT_NUMBER的好方法.
是否可以在群组堆栈服务中动态设置主机名/容器名称?
在.yml定义中,我一直在拉latest我的服务形象。
当我将新映像推送到注册表时,我想更新堆栈中的服务使用的映像。我没有看到任何--pull标志,并且docker服务更新的文档中没有明确提及这一点。
如何使用最近推送的latest图像重新部署?
我们正在将 CI 基础设施实现为 Docker 堆栈。
堆栈中的一些容器现在需要访问外部服务,只能通过 OpenVPN 连接使用,比如说在192.168.2.0/24子网上。
为了尽可能保持容器的“单一用途”,我们最好添加一个 Docker 容器作为 VPN 网关,其他容器可以通过它与192.168.2.0/24子网通信。
这首先带来了一个复杂性:VPN 客户端容器需要cap-addof NET_ADMIN,这在我们用于部署堆栈的 swarm 模式中不可用。是否有解决方法,从单独启动 VPN 客户端容器到docker run?
更重要的是,一旦我们vpnclient运行并连接了容器,我们如何配置 swarm 中的其他容器以实际将其用作网关以访问192.168.2.0/24子网上的所有 IP ?