Tôi không biết mình đang làm gì sai, nhưng tôi chỉ đơn giản là không thể docker-compose up
sử dụng hình ảnh mới nhất từ sổ đăng ký của chúng tôi mà không xóa hoàn toàn các vùng chứa cũ khỏi hệ thống trước. Có vẻ như tính năng soạn thư đang sử dụng hình ảnh đã bắt đầu trước đó mặc dù tính năng kéo của trình soạn thư đã tải xuống hình ảnh mới hơn.
Tôi đã xem Làm cách nào để có được trình soạn nhạc để luôn tạo lại các vùng chứa từ hình ảnh mới? điều này dường như tương tự với vấn đề của tôi, nhưng không có giải pháp nào được cung cấp ở đó phù hợp với tôi, vì tôi đang tìm giải pháp mà tôi có thể sử dụng trên máy chủ sản xuất và ở đó tôi không muốn xóa tất cả các vùng chứa trước khi bắt đầu chúng một lần nữa (có thể mất dữ liệu?). Tôi chỉ muốn soạn thảo để phát hiện phiên bản mới của những hình ảnh đã thay đổi, kéo chúng và sau đó khởi động lại dịch vụ với những hình ảnh mới đó.
Tôi đã tạo một dự án thử nghiệm đơn giản cho việc này, trong đó mục tiêu duy nhất là có được phiên bản nr để tăng lên trên mỗi bản dựng mới. Phiên bản nr được hiển thị nếu tôi duyệt đến máy chủ nginx được tạo (điều này hoạt động như mong đợi cục bộ).
phiên bản docker: 1.11.2 Docker-soạn phiên bản: 1.7.1 Hệ điều hành: được thử nghiệm trên cả CentOS 7 và OS X 10.10 bằng cách sử dụng docker-toolbox
Docker-compos.yml của tôi:
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
trên máy chủ jenkins của chúng tôi, tôi chạy phần sau để xây dựng và gắn thẻ hình ảnh
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
điều này dường như đang làm những gì nó phải như vậy vì tôi nhận được thẻ phiên bản mới trong kho lưu trữ của chúng tôi mỗi khi quá trình xây dựng hoàn thành và phiên bản nr đã bị thay đổi.
Nếu bây giờ tôi chạy
docker-compose pull && docker-compose -f docker-compose.yml up -d
trong một thư mục trên máy tính của tôi, nơi nội dung chỉ là docker-compo.yml và các Dockerfiles cần thiết để xây dựng các dịch vụ nginx và php, đầu ra tôi nhận được không phải là số phiên bản mới nhất như đã được gắn thẻ trong sổ đăng ký hoặc được hiển thị trong docker-compost.yml (0.1.8), nhưng là phiên bản trước đó, 0.1.7. Tuy nhiên, đầu ra của lệnh pull sẽ gợi ý rằng một phiên bản mới của hình ảnh đã được tìm nạp:
Pulling application (ourprivate.docker.reg:5000/ourcompany/buildchaintest:latest)...
latest: Pulling from ourcompany/buildchaintest
Digest: sha256:8f7a06203005ff932799fe89e7756cd21719cccb9099b7898af2399414bfe62a
Status: Downloaded newer image for docker.locotech.fi:5000/locotech/buildchaintest:0.1.8-dev
Chỉ khi tôi chạy
docker-compose stop && docker-compose rm -f
và sau đó chạy docker-compose up
lệnh để tôi nhận được phiên bản mới hiển thị trên màn hình như mong đợi.
Đây có phải là hành vi dự định của docker-soạn không? tức là tôi có nên luôn thực hiện docker-compose rm -f
trước khi chạy up
lại, ngay cả trên máy chủ sản xuất không? Hay tôi đang làm gì đó chống lại hạt ở đây, đó là lý do tại sao nó không hoạt động?
Mục tiêu là để quy trình xây dựng của chúng tôi xây dựng và tạo các phiên bản được gắn thẻ của những hình ảnh cần thiết trong docker-compos.yml, đẩy chúng vào sổ đăng ký riêng tư của chúng tôi và sau đó cho "bước phát hành đến bước sản xuất" để chỉ cần sao chép docker-soạn. yml đến máy chủ sản xuất và chạy một docker-compose pull && docker-compose -f docker-compose.yml up -d
hình ảnh mới để bắt đầu sản xuất. Nếu ai đó có mẹo về điều này hoặc có thể chỉ ra hướng dẫn thực hành tốt nhất cho loại thiết lập này cũng sẽ được đánh giá cao.
docker-compose up -d --force-recreate
không hoạt động?