此命令当前正在后台运行项目:
docker-compose up -d
我需要对其docker-compose.yml
进行两项更改:
- 添加新容器
- 更新以前的容器以具有指向新容器的链接
更改后:
注意“ <--
”箭头进行我的更改
web:
build: .
restart: always
command: ['tini', '--', 'rails', 's']
environment:
RAILS_ENV: production
HOST: example.com
EMAIL: admin@example.com
links:
- db:mongo
- exim4:exim4.docker # <-- Add link
ports:
- 3000:3000
volumes:
- .:/usr/src/app
db:
image: mongo
restart: always
exim4: # <-------------------------------- Add new container
image: exim4
restart: always
ports:
- 25:25
environment:
EMAIL_USER: user@example.com
EMAIL_PASSWORD: abcdabcdabcdabcd
进行更改后,如何应用它们?(不破坏任何内容)
我尝试了docker-compose down && docker-compose up -d
,但这破坏了Mongo DB容器...我再也不能这样做了...:sob:
docker-compose restart
说它无法识别对docker-compose.yml
所做的任何更改
(来源:https://docs.docker.com/compose/reference/restart/)
docker-compose stop && docker-compose start
听起来像是在不进行更改的情况下启动旧容器?
测试服务器:
生产服务器可能使用的是较早版本,不确定是否会造成问题?
答案 0 :(得分:4)
如果再次运行docker compose up -d
,它将注意到新容器和更改的配置并应用它们。
但是:
(不破坏任何东西)
有些设置只能在容器启动时设置。如果更改这些设置,则Docker Compose将删除并重新创建受影响的容器。例如,链接是仅用于启动的选项,因此重新运行docker-compose up -d
将删除并重新创建web
容器。
这摧毁了Mongo DB容器...我再也不能这样做...
db:
image: mongo
restart: always
为此添加一个volumes:
选项,以便将数据存储在容器外部。您可以将其保存在一个可能由Docker Compose管理的命名卷中,该卷具有一些优点,但是主机系统目录可能更难以意外销毁。您必须删除并重新启动容器才能更改此选项。但是请注意,例如,如果MongoDB中存在安全更新,并且您需要新的映像,则还必须删除并重新启动容器。
您的理想状态是:
如果丢失了整个/var/lib/docker
目录(发生这种情况!),则实际上不应该丢失任何状态,尽管您可能会因应用程序停机而结束。
答案 1 :(得分:1)
docker-compose up -d
就可以完成工作。
输出应该像
> docker-compose up -d
Starting container1 ... done
> docker-compose up -d
container1 is up-to-date
Creating container2 ... done
请注意,docker-compose并非真正用于生产。您可能要考虑使用docker swarm。