profile
viewpoint
Chris Crone chris-crone @docker (ex-@infinit) Paris, France

docker/roadmap 286

Welcome to the Public Roadmap for All Things Docker! We welcome your ideas.

chris-crone/containerized-go-dev 23

Containerize your Go development environment!

cnabio/community 7

CNAB Community Assets

chris-crone/kubecon-eu-19 1

KubeCon EU 2019: Intro to CNAB examples

chris-crone/app 0

Make your Docker Compose applications reusable, and share them on Docker Hub

chris-crone/buildkit 0

concurrent, cache-efficient, and Dockerfile-agnostic builder toolkit

chris-crone/cli 0

The Docker CLI

chris-crone/cnab-spec 0

Cloud Native Application Bundle Specification

chris-crone/community 0

CNAB Community Assets

Pull request review commentdocker/docker.github.io

Publish updates from master

 For information about Stable releases, see the [Stable release notes](release-no  - Compose-on-Kubernetes is no longer included in the Docker Desktop installer. You can download it separately from the compose-on-kubernetes [release page](https://github.com/docker/compose-on-kubernetes/releases). - Fixed an incompatibility between `hyperkit` and `osquery` which resulted in excessive `hyperkit` CPU usage. See [docker/for-mac#3499](https://github.com/docker/for-mac/issues/3499#issuecomment-639140844)-- Docker Desktop now respects consistency flags `cached`, `delegated`, `consistent` even when in a list of options (for example, `z,delegated`). See [docker/for-mac#4089]( https://github.com/docker/for-mac/issues/4590#issuecomment-650221168).+- Docker Desktop now respects consistency flags `cached`, `delegated`, `consistent` even when in a list of options (for example, `z,delegated`). See [docker/for-mac#4718]( https://github.com/docker/for-mac/issues/4718).
- Docker Desktop now respects consistency flags `cached`, `delegated`, `consistent` even when in a list of options (for example, `z,delegated`). See [docker/for-mac#4718](https://github.com/docker/for-mac/issues/4718).
usha-mandya

comment created time in 2 days

push eventdocker/ecs-plugin

Nicolas De Loof

commit sha 6aabc6a7dd7505e2ec834f8a7e46b5d05117a992

Clarify example/README about required secret NAME Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>

view details

push time in 3 days

delete branch docker/ecs-plugin

delete branch : readme

delete time in 3 days

PR merged docker/ecs-plugin

Clarify example/README about required secret NAME

What I did fixed requirement for secret NAME in example's README

Related issue closes #146

(not mandatory) A picture of a cute animal, if possible in relation with what you did image

+4 -1

0 comment

1 changed file

ndeloof

pr closed time in 3 days

issue commentdocker/docker.github.io

CLI Plugin docs gone missing?

Is there anything that CLI plugin developers can do to avoid that their plugins just stop working with a future Docker version?

The two ways forward are either: (1) to upstream the changes or (2) to create a standalone tool.

Is there any github issue that I could read to better understand this deprecation?

I don't think we opened an external issue for this. The decision was based on us not wanting to fragment the Docker CLI UX. We want users of the CLI to have the same experience and not be confused that some commands work in some places but not others (i.e.: when you do/don't have the plugin installed).

christian-korneck

comment created time in 3 days

issue commentdocker/docker.github.io

CLI Plugin docs gone missing?

Hi @christian-korneck!

The plugin mechanism is deprecated and we consider the plugin API unstable. We will either remove it or re-architecture in a future release of the CLI.

The ECS integration was done as a plugin to decouple internal development work. We will be pulling it into the CLI in the near future so that the UX is the same as that of the ACI integration.

christian-korneck

comment created time in 3 days

Pull request review commentdocker/ecs-plugin

Check context created by `context` command

 func NewAPI(sess *session.Session) API { 	} } +func (s sdk) CheckRequirements(ctx context.Context) error {+	settings, err := s.ECS.ListAccountSettingsWithContext(ctx, &ecs.ListAccountSettingsInput{+		EffectiveSettings: aws.Bool(true),+		Name:              aws.String("serviceLongArnFormat"),+	})+	if err != nil {+		return err+	}+	serviceLongArnFormat := settings.Settings[0].Value+	if *serviceLongArnFormat != "enabled" {+		return fmt.Errorf("amazon ECS integration require you to opt-in for 'new ARN resource ID format'")
		return errors.New("This tool requires the \"new ARN resource ID format\"")
ndeloof

comment created time in 3 days

PR opened docker/ecs-plugin

Blog link fix in README
+1 -1

0 comment

1 changed file

pr created time in 3 days

create barnchchris-crone/docker-ecs-plugin

branch : link-fix

created branch time in 3 days

PR opened docker/ecs-plugin

Quick fixes for release

What I did

  • Fixed curl command
  • Added link to blog post on README
  • Added install instructions to README
+12 -1

0 comment

2 changed files

pr created time in 3 days

create barnchchris-crone/docker-ecs-plugin

branch : release

created branch time in 3 days

fork chris-crone/ecs-plugin

CLI plugin for using Fargate/ECS with Docker CLI

fork in 3 days

starteddocker/ecs-plugin

started time in 3 days

push eventdocker/aci-integration-beta

Guillaume Tardif

commit sha fa8d3b1acacce1f35eaaf9030d72a7028c808306

Initial script from v0.1.4 release

view details

Guillaume Tardif

commit sha f530f5a8d006d773d246e2a923e5cd79a13791e1

Updated script to get latest release (not a pinned version)

view details

Chris Crone

commit sha e834e244b74c340bda7acc21296d7fd181cbc7ce

Merge pull request #17 from gtardif/install_script_latest_release Install script latest release

view details

push time in 4 days

PR merged docker/aci-integration-beta

Install script latest release
  • got initial script from v0.1.4 release
  • updated it to get latest release, and update CLI if it was already installed
  • Added Dockerfile to test it
+213 -6

0 comment

3 changed files

gtardif

pr closed time in 4 days

Pull request review commentdocker/aci-integration-beta

Install script latest release

+#!/bin/sh++# Script to install the Docker ACI integration CLI on Ubuntu (Beta).++set -eu++RELEASE_URL=https://api.github.com/repos/docker/aci-integration-beta/releases/latest+LINK_NAME="${LINK_NAME:-com.docker.cli}"+DRY_RUN="${DRY_RUN:-}"++desktop_install_url="https://www.docker.com/products/docker-desktop"+engine_install_url="https://docs.docker.com/get-docker/"++link_path="/usr/local/bin/${LINK_NAME}"+existing_cli_path="/usr/bin/docker"++manual_install() {+	echo "Please follow the manual install instructions"+}++is_new_cli() {+	azure_version_str="$($1 version 2>/dev/null | grep 'Azure' || true)"+	if [ -n "$azure_version_str" ]; then+		echo 1+	else+		echo 0+	fi+}++echo "Running checks..."++# Check OS+if [ "$(command -v uname)" ]; then+	case "$(uname -s)" in+		"Linux")+			# Check for Ubuntu/Debian based distro+			if ! [ -f "/etc/lsb-release" ]; then+				echo "Warning: This script has been tested on Ubuntu and may not work on other distributions"+			fi+			# Pass+			;;+		"Darwin")+			echo "Error: Script not needed on macOS, please install Docker Desktop Edge: $desktop_install_url"+			exit 1+			;;+		"*")+			echo "Error: Unsupported OS, please follow manual instructions"+			exit 1+			;;+	esac+else+	# Assume Windows+	echo "Error: Script not needed on Windows, please install Docker Desktop Edge: $desktop_install_url"+	exit 1+fi++user="$(id -un 2>/dev/null || true)"+sh_c='sh -c'+sudo_sh_c='sh -c'+if [ "$user" != 'root' ]; then+    if [ "$(command -v sudo)" ]; then+        sudo_sh_c='sudo -E sh -c'+    elif [ "$(command -v su)" ]; then+        sudo_sh_c='su -c'+    else+        echo "Error: This installer needs the ability to run commands as root."+        exit 1+    fi+fi++if [ -n "$DRY_RUN" ]; then+	sh_c='echo $sh_c'+	sudo_sh_c='echo $sudo_sh_c'+fi++# Check if Docker Engine is installed+if ! [ "$(command -v docker)" ]; then+	echo "Error: Docker Engine not found"+	echo "You need to install Docker first: $engine_install_url"+	exit 1+fi++download_cmd='curl -fsSLo'+# Check that system has curl installed+if ! [ "$(command -v curl)" ]; then+	echo "Error: curl not found"+	echo "Please install curl"+	exit 1+fi++DOWNLOAD_URL=$(curl -s ${RELEASE_URL} | grep "browser_download_url.*docker-linux-amd64" | cut -d : -f 2,3)++# Check if the ACI CLI is already installed+if [ $(is_new_cli "docker") -eq 1 ]; then+	echo "You already have the Docker ACI Integration CLI installed, overriding with latest version"+	download_dir=$($sh_c 'mktemp -d')+	$sh_c "${download_cmd} ${download_dir}/docker-aci ${DOWNLOAD_URL}"

Would be good to factor this with the download code lower down. Can be done in a follow up.

gtardif

comment created time in 4 days

Pull request review commentdocker/aci-integration-beta

Install script latest release

+FROM ubuntu:latest

Nice!

Note that this doesn't test installing as a non-root user. Definitely better than nothing though!

gtardif

comment created time in 4 days

Pull request review commentdocker/aci-integration-beta

Install script latest release

+#!/bin/sh++# Script to install the Docker ACI integration CLI on Ubuntu (Beta).++set -eu++RELEASE_URL=https://api.github.com/repos/docker/aci-integration-beta/releases/latest+LINK_NAME="${LINK_NAME:-com.docker.cli}"+DRY_RUN="${DRY_RUN:-}"++desktop_install_url="https://www.docker.com/products/docker-desktop"+engine_install_url="https://docs.docker.com/get-docker/"++link_path="/usr/local/bin/${LINK_NAME}"+existing_cli_path="/usr/bin/docker"++manual_install() {+	echo "Please follow the manual install instructions"+}++is_new_cli() {+	azure_version_str="$($1 version 2>/dev/null | grep 'Azure' || true)"+	if [ -n "$azure_version_str" ]; then+		echo 1+	else+		echo 0+	fi+}++echo "Running checks..."++# Check OS+if [ "$(command -v uname)" ]; then+	case "$(uname -s)" in+		"Linux")+			# Check for Ubuntu/Debian based distro+			if ! [ -f "/etc/lsb-release" ]; then+				echo "Warning: This script has been tested on Ubuntu and may not work on other distributions"+			fi+			# Pass+			;;+		"Darwin")+			echo "Error: Script not needed on macOS, please install Docker Desktop Edge: $desktop_install_url"+			exit 1+			;;+		"*")+			echo "Error: Unsupported OS, please follow manual instructions"+			exit 1+			;;+	esac+else+	# Assume Windows+	echo "Error: Script not needed on Windows, please install Docker Desktop Edge: $desktop_install_url"+	exit 1+fi++user="$(id -un 2>/dev/null || true)"+sh_c='sh -c'+sudo_sh_c='sh -c'+if [ "$user" != 'root' ]; then+    if [ "$(command -v sudo)" ]; then+        sudo_sh_c='sudo -E sh -c'+    elif [ "$(command -v su)" ]; then+        sudo_sh_c='su -c'+    else+        echo "Error: This installer needs the ability to run commands as root."+        exit 1+    fi+fi++if [ -n "$DRY_RUN" ]; then+	sh_c='echo $sh_c'+	sudo_sh_c='echo $sudo_sh_c'+fi++# Check if Docker Engine is installed+if ! [ "$(command -v docker)" ]; then+	echo "Error: Docker Engine not found"+	echo "You need to install Docker first: $engine_install_url"+	exit 1+fi++download_cmd='curl -fsSLo'+# Check that system has curl installed+if ! [ "$(command -v curl)" ]; then+	echo "Error: curl not found"+	echo "Please install curl"+	exit 1+fi++DOWNLOAD_URL=$(curl -s ${RELEASE_URL} | grep "browser_download_url.*docker-linux-amd64" | cut -d : -f 2,3)++# Check if the ACI CLI is already installed+if [ $(is_new_cli "docker") -eq 1 ]; then+	echo "You already have the Docker ACI Integration CLI installed, overriding with latest version"+	download_dir=$($sh_c 'mktemp -d')+	$sh_c "${download_cmd} ${download_dir}/docker-aci ${DOWNLOAD_URL}"+	$sudo_sh_c "install -m 775 ${download_dir}/docker-aci /usr/local/bin/docker"

We should check that a version of the CLI is present here and fail if it isn't. It's possible they manually installed to another location and then tried to update with the script.

gtardif

comment created time in 4 days

Pull request review commentdocker/compose-on-kubernetes

Add installation steps of compose on kubernetes on Docker Desktop

 More documentation can be found in the [docs/](./docs) directory. This includes:  # Get started -Compose on Kubernetes comes installed on-[Docker Desktop](https://www.docker.com/products/docker-desktop) and-[Docker Enterprise](https://www.docker.com/products/docker-enterprise).+## Install Compose on Kubernetes on Docker Desktop++### Pre-requisites++- Docker Desktop

Please add a link here, ask @nebuk89 which one he'd like

lorenrh

comment created time in 5 days

push eventdocker/compose-on-kubernetes

Lorena Rangel

commit sha 666f8b7731b31f4ffe1c784326acba7cb38d78f7

Update deploy etcd instructions to work with helm 3 Signed-off-by: Lorena Rangel <lorena.rangel@docker.com>

view details

Chris Crone

commit sha cb72143de79db7fa4b69604747b9cb5403a8dcd3

Merge pull request #163 from lorenrh/update-deploy-etcd Update deploy etcd instructions to work with helm 3

view details

push time in 5 days

PR merged docker/compose-on-kubernetes

Reviewers
Update deploy etcd instructions to work with helm 3

Updates instructions on etcd to work on Helm 3 or above.

Signed-off-by: Lorena Rangel lorena.rangel@docker.com

+2 -14

0 comment

1 changed file

lorenrh

pr closed time in 5 days

issue openeddocker/roadmap

[GitHub Action] Upgrade to buildx

Tell us about your request The Docker GitHub Action currently uses the features provided by docker build. Faster builds are accessible by using BuildKit but this requires setting an environment variable which is not obvious to most users. Building multi arch images is currently not possible. This proposes moving the GitHub Action to use buildx which provides these features out of the box.

Which service(s) is this request for? This is for the Docker GitHub Action which can be found here. Source code for the Action can be found here.

Tell us about the problem you're trying to solve. What are you trying to do, and why is it hard?

  • Using BuildKit for faster builds
  • Building multiarch images

Are you currently working around the issue? N/A

Additional context More technical details can be found on the Docker GitHub Action's issue tracker.

created time in 5 days

Pull request review commentcompose-spec/compose-go

Introduce ErrIncompatible

 var (  	// ErrUnsupported is returned when a compose project uses an unsupported attribute 	ErrUnsupported = errors.New("unsupported attribute")++	// ErrIncompatible is returned when a compose project uses an incompatible attribute+	ErrIncompatible = errors.New("incompatible attribute")

How does this differ to unsupported? Is it that there are a combination of features being used that does not work?

ndeloof

comment created time in 6 days

create barnchchris-crone/compose-community

branch : community-meeting-2020-07-02

created branch time in 10 days

create barnchchris-crone/compose-community

branch : community-meeting-2020-06-18

created branch time in 10 days

create barnchchris-crone/compose-community

branch : ommunity-meeting-2020-06-18

created branch time in 10 days

Pull request review commentdocker/docker.github.io

Add a note to create a context in different subscription

 docker login azure 
 This opens your web browser and prompts you to enter your Azure login credentials.
 
+

nit: extra \n

sujaypillai

comment created time in 12 days

issue commentdocker/aci-integration-beta

Why aren't all the existing Docker commands and flags available with ACI

Thanks for the feedback @sujaypillai! I'm curious why you use the <noun> <verb> syntax? Is this a script or a command that you type?

chris-crone

comment created time in 14 days

issue commentdocker/aci-integration-beta

Cannot map container ports on ACI

First bit of feedback on this repo, thanks @BretFisher :)

Yes, unfortunately with ACI we can't have two services that use the same port in the Compose stack. This is a combination of two issues:

  1. ACI doesn't support port mapping
  2. We create all the containers in the same container group which is similar to a Kubernetes pod in that all the containers are scheduled on the same host
chris-crone

comment created time in 17 days

Pull request review commentdocker/docker.github.io

Add docs for Docker Azure integration beta

+---
+title: Deploying Docker containers on Azure
+description: Deploying Docker containers on Azure
+keywords: Docker, Azure, Integration, ACI, context, cli, deploy, containers, cloud
+toc_min: 1
+toc_max: 2
+---
+
+## Overview
+
+The Docker Azure Integration enables developers to use native Docker commands to run applications in Azure Container Instances (ACI) when building cloud-native applications. The new experience provides a tight integration between Docker Desktop and Microsoft Azure allowing developers to quickly run applications using the Docker CLI or VS Code extension, to switch seamlessly from local development to cloud deployment.
+
+In addition, the integration between Docker and Microsoft developer technologies offers the following benefits that enable developers to:
+
+- Easily log into Azure directly from the Docker CLI
+- Set up an ACI context in one Docker command allowing you to switch from a local context to a cloud context and run applications quickly and easily
+- Simplify single container and multi-container application development using the Compose specification, allowing a developer to invoke fully Docker-compatible commands seamlessly for the first time natively within a cloud container service
+
+>**Note**
+>
+> Docker Azure Integration is currently a beta release. The commands and flags are subject to change in subsequent releases.
+{:.important}
+
+## Prerequisites
+
+To deploy Docker containers on Azure, you must meet the following requirements:
+
+1. Download and install Docker Desktop Edge version 2.3.2.0.

Should we have a link for downloading Desktop here?

1. Download and install Docker Desktop Edge version 2.3.2.0 or later.

usha-mandya

comment created time in 18 days

Pull request review commentdocker/docker.github.io

Add docs for Docker Azure integration beta

+---
+title: Deploying Docker containers on Azure
+description: Deploying Docker containers on Azure
+keywords: Docker, Azure, Integration, ACI, context, cli, deploy, containers, cloud
+toc_min: 1
+toc_max: 2
+---
+
+## Overview
+
+The Docker Azure Integration enables developers to use native Docker commands to run applications in Azure Container Instances (ACI) when building cloud-native applications. The new experience provides a tight integration between Docker Desktop and Microsoft Azure allowing developers to quickly run applications using the Docker CLI or VS Code extension, to switch seamlessly from local development to cloud deployment.
+
+In addition, the integration between Docker and Microsoft developer technologies offers the following benefits that enable developers to:
+
+- Easily log into Azure directly from the Docker CLI
+- Set up an ACI context in one Docker command allowing you to switch from a local context to a cloud context and run applications quickly and easily
+- Simplify single container and multi-container application development using the Compose specification, allowing a developer to invoke fully Docker-compatible commands seamlessly for the first time natively within a cloud container service
+
+>**Note**
+>
+> Docker Azure Integration is currently a beta release. The commands and flags are subject to change in subsequent releases.
+{:.important}
+
+## Prerequisites
+
+To deploy Docker containers on Azure, you must meet the following requirements:
+
+1. Download and install Docker Desktop Edge version 2.3.2.0.
+
+    - Download for Mac
+    - Download for Windows
+
+    Alternatively, install the [Docker ACI Integration for Linux](#install-the-docker-aci-integration-cli-on-linux).
+
+2. Ensure you have an Azure subscription. You can get started with an [Azure free account](https://aka.ms/AA8r2pj){: target="_blank" class="_"}.
+
+## Run Docker containers on ACI
+
+Docker not only runs containers locally, but also enables developers to seamlessly deploy Docker containers on ACI using docker run or deploy multi-container applications defined in a Compose file using the `docker compose up` command.
+
+The following sections contain instructions on how to deploy your Docker containers on ACI.
+
+### Log into Azure
+
+Run the following commands to log into Azure:
+
+```console
+docker login azure
+```
+
+This opens your web browser and prompts you to enter your Azure login credentials.
+
+### Create an ACI context
+
+After you have logged in, you need to create a Docker context associated with ACI to deploy containers in ACI. For example, let us create a new context called `myacicontext`:
+
+```console
+docker context create aci myacicontext
+```
+
+This command automatically uses your Azure login credentials to identify your subscription IDs and resource groups. You can then interactively select the subscription and group that you would like to use. If you prefer, you can specify these options in the CLI using the following flags: `--subscription-id`,
+`--resource-group`, and `--location`.
+
+If you don't have any existing resource groups in your Azure account, the `docker context create aci myacicontext` command creates one for you. You don’t have to specify any additional options to do this.
+
+After you have created an ACI context, you can list your Docker contexts by running the `docker context ls` command:
+
+```console
+NAME                TYPE                DESCRIPTION                               DOCKER ENDPOINT                KUBERNETES ENDPOINT   ORCHESTRATOR
+myacicontext        aci                 myResourceGroupGTA@eastus
+default *           moby              Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                          swarm
+```
+
+### Run a container
+
+Now that you've logged in and created an ACI context, you can start using Docker commands to deploy containers on ACI.
+
+There are two ways to use your new ACI context. You can use the `--context` flag with the Docker command to specify that you would like to run the command using your newly created ACI context.
+
+```console
+docker --context myacicontext run -p 80:80 nginx
+```
+
+Or, you can change context using `docker context use` to select the ACI context to be your focus for running Docker commands. For example, we can use the `docker context use` command to deploy an ngnix container:
+
+```console
+docker context use myacicontext
+docker run -p 80:80 nginx
+```
+
+After you've switched to the `myacicontext` context, you can use docker ps to list your containers running on ACI.
+
+To view logs from your container, run:
+
+```console
+docker logs <CONTAINER_ID>
+```
+
+To execute a command in a running container, run:
+
+```console
+docker exec -t <CONTAINER_ID> COMMAND
+```
+
+To stop and remove a container from ACI, run:
+
+```console
+docker rm <CONTAINER_ID>
+```
+
+## Running Compose applications
+
+You can also deploy and manage multi-container applications defined in Compose files to ACI using the `docker compose` command. To do this:
+
+1. Ensure you are using your ACI context. You can do this either by specifying the `--context myacicontext` flag or by setting the default context using the command  `docker context use myacicontext`.
+
+2. Run `docker compose up` and `docker compose down` to start and then stop a full Compose application.
+
+  By default, `docker compose up` uses the `docker-compose.yaml` file in the current folder. You can specify the working directory using the  --workdir  flag or specify the Compose file directly using the `--file` flag.
+
+  You can also specify a name for the Compose application using the `--project-name` flag during deployment. If no name is specified, a name will be derived from the working directory.
+
+  You can view logs from containers that are part of the Compose application using the command `docker logs <CONTAINER_ID>`. To know the container ID, run `docker ps`.
+
+> **Note**
+>
+> The current Docker Azure integration does not allow fetching a combined log stream from all the containers that make up the Compose application.
+
+## Using ACI resource groups as namespaces
+
+You can create several Docker contexts associated with ACI. Each context must be associated with a unique Azure resource group. This allows you to use Docker contexts as namespaces. You can switch between namespaces using `docker context use <CONTEXT>`.
+
+When you run the `docker ps` command, it only lists containers in your current Docker context. There won’t be any contention in container names or Compose application names between two Docker contexts.
+
+## Install the Docker ACI Integration CLI on Linux
+
+The Docker ACI Integration CLI adds support for running and managing containers on Azure Container Instances (ACI).
+
+>**Note**
+>
+> **Docker Azure Integration is a beta release**. The installation process, commands, and flags will change in future releases.
+{:.important}
+
+### Prerequisites
+
+* [Docker 19.03 or later](https://docs.docker.com/get-docker/)
+
+### Install script
+
+You can install the new CLI using the install script:
+
+```console
+curl -L https://github.com/docker/aci-integration-beta/releases/download/v0.1.4/install.sh | sh
+```
+
+### Manual install
+
+You can download the Docker ACI Integration CLI using the following command:
+
+```console
+curl -Lo docker-aci https://github.com/docker/aci-integration-beta/releases/download/v0.1.4/docker-linux-amd64
+```
+
+You will then need to make it executable:
+
+```console
+chmod +x docker-aci
+```
+
+To enable using the local Docker Engine and to use existing Docker contexts, you
+must have the existing Docker CLI as `com.docker.cli` somewhere in your
+`PATH`. You can do this by creating a symbolic link from the existing Docker
+CLI:
+
+```console
+ln -s /path/to/existing/docker /directory/in/PATH/com.docker.cli
+```
+
+> **Note**
+>
+> The `PATH` environment variable is a colon-separated list of
+> directories with priority from left to right. You can view it using
+> `echo $PATH`. You can find the path to the existing Docker CLI using
+> `which docker`. You may need root permissions to make this link.
+
+On a fresh install of Ubuntu 20.04 with Docker Engine
+[already installed](https://docs.docker.com/engine/install/ubuntu/):
+
+```console
+$ echo $PATH
+/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
+$ which docker
+/usr/bin/docker
+$ sudo ln -s /usr/bin/docker /usr/local/bin/com.docker.cli
+```
+
+You can verify that this is working by checking that the new CLI works with the
+default context:
+
+```console
+$ ./docker-aci --context default ps
+CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
+$ echo $?
+0
+```
+
+To make this CLI with ACI integration your default Docker CLI, you must move it
+to a directory in your `PATH` with higher priority than the existing Docker CLI.
+
+Again, on a fresh Ubuntu 20.04:
+
+```console
+$ which docker
+/usr/bin/docker
+$ echo $PATH
+/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
+$ sudo mv docker-aci /usr/local/bin

I fixed this elsewhere and didn't let you know, sorry.

$ sudo mv docker-aci /usr/local/bin/docker

usha-mandya

comment created time in 18 days

Pull request review commentdocker/docker.github.io

Add docs for Docker Azure integration beta

+---
+title: Deploying Docker containers on Azure
+description: Deploying Docker containers on Azure
+keywords: Docker, Azure, Integration, ACI, context, cli, deploy, containers, cloud
+toc_min: 1
+toc_max: 2
+---
+
+## Overview
+
+The Docker Azure Integration enables developers to use native Docker commands to run applications in Azure Container Instances (ACI) when building cloud-native applications. The new experience provides a tight integration between Docker Desktop and Microsoft Azure allowing developers to quickly run applications using the Docker CLI or VS Code extension, to switch seamlessly from local development to cloud deployment.
+
+In addition, the integration between Docker and Microsoft developer technologies offers the following benefits that enable developers to:
+
+- Easily log into Azure directly from the Docker CLI
+- Set up an ACI context in one Docker command allowing you to switch from a local context to a cloud context and run applications quickly and easily
+- Simplify single container and multi-container application development using the Compose specification, allowing a developer to invoke fully Docker-compatible commands seamlessly for the first time natively within a cloud container service
+
+>**Note**
+>
+> Docker Azure Integration is currently a beta release. The commands and flags are subject to change in subsequent releases.
+{:.important}
+
+## Prerequisites
+
+To deploy Docker containers on Azure, you must meet the following requirements:
+
+1. Download and install Docker Desktop Edge version 2.3.2.0.
+
+    - Download for Mac
+    - Download for Windows
+
+    Alternatively, install the [Docker ACI Integration for Linux](#install-the-docker-aci-integration-cli-on-linux).
+
+2. Ensure you have an Azure subscription. You can get started with an [Azure free account](https://aka.ms/AA8r2pj){: target="_blank" class="_"}.
+
+## Run Docker containers on ACI
+
+Docker not only runs containers locally, but also enables developers to seamlessly deploy Docker containers on ACI using docker run or deploy multi-container applications defined in a Compose file using the `docker compose up` command.
+
+The following sections contain instructions on how to deploy your Docker containers on ACI.
+
+### Log into Azure
+
+Run the following commands to log into Azure:
+
+```console
+docker login azure
+```
+
+This opens your web browser and prompts you to enter your Azure login credentials.
+
+### Create an ACI context
+
+After you have logged in, you need to create a Docker context associated with ACI to deploy containers in ACI. For example, let us create a new context called `myacicontext`:
+
+```console
+docker context create aci myacicontext
+```
+
+This command automatically uses your Azure login credentials to identify your subscription IDs and resource groups. You can then interactively select the subscription and group that you would like to use. If you prefer, you can specify these options in the CLI using the following flags: `--subscription-id`,
+`--resource-group`, and `--location`.
+
+If you don't have any existing resource groups in your Azure account, the `docker context create aci myacicontext` command creates one for you. You don’t have to specify any additional options to do this.
+
+After you have created an ACI context, you can list your Docker contexts by running the `docker context ls` command:
+
+```console
+NAME                TYPE                DESCRIPTION                               DOCKER ENDPOINT                KUBERNETES ENDPOINT   ORCHESTRATOR
+myacicontext        aci                 myResourceGroupGTA@eastus
+default *           moby              Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                          swarm
+```
+
+### Run a container
+
+Now that you've logged in and created an ACI context, you can start using Docker commands to deploy containers on ACI.
+
+There are two ways to use your new ACI context. You can use the `--context` flag with the Docker command to specify that you would like to run the command using your newly created ACI context.
+
+```console
+docker --context myacicontext run -p 80:80 nginx
+```
+
+Or, you can change context using `docker context use` to select the ACI context to be your focus for running Docker commands. For example, we can use the `docker context use` command to deploy an ngnix container:
+
+```console
+docker context use myacicontext
+docker run -p 80:80 nginx
+```
+
+After you've switched to the `myacicontext` context, you can use docker ps to list your containers running on ACI.
+
+To view logs from your container, run:
+
+```console
+docker logs <CONTAINER_ID>
+```
+
+To execute a command in a running container, run:
+
+```console
+docker exec -t <CONTAINER_ID> COMMAND
+```
+
+To stop and remove a container from ACI, run:
+
+```console
+docker rm <CONTAINER_ID>
+```
+
+## Running Compose applications
+
+You can also deploy and manage multi-container applications defined in Compose files to ACI using the `docker compose` command. To do this:
+
+1. Ensure you are using your ACI context. You can do this either by specifying the `--context myacicontext` flag or by setting the default context using the command  `docker context use myacicontext`.
+
+2. Run `docker compose up` and `docker compose down` to start and then stop a full Compose application.
+
+  By default, `docker compose up` uses the `docker-compose.yaml` file in the current folder. You can specify the working directory using the  --workdir  flag or specify the Compose file directly using the `--file` flag.
+
+  You can also specify a name for the Compose application using the `--project-name` flag during deployment. If no name is specified, a name will be derived from the working directory.
+
+  You can view logs from containers that are part of the Compose application using the command `docker logs <CONTAINER_ID>`. To know the container ID, run `docker ps`.
+
+> **Note**
+>
+> The current Docker Azure integration does not allow fetching a combined log stream from all the containers that make up the Compose application.
+
+## Using ACI resource groups as namespaces
+
+You can create several Docker contexts associated with ACI. Each context must be associated with a unique Azure resource group. This allows you to use Docker contexts as namespaces. You can switch between namespaces using `docker context use <CONTEXT>`.
+
+When you run the `docker ps` command, it only lists containers in your current Docker context. There won’t be any contention in container names or Compose application names between two Docker contexts.
+
+## Install the Docker ACI Integration CLI on Linux

Maybe we should just point them to the GitHub repo for Linux? That way we don't have to maintain the docs in two places

usha-mandya

comment created time in 18 days

Pull request review commentdocker/docker.github.io

Add docs for Docker Azure integration beta

+---
+title: Deploying Docker containers on Azure
+description: Deploying Docker containers on Azure
+keywords: Docker, Azure, Integration, ACI, context, cli, deploy, containers, cloud
+toc_min: 1
+toc_max: 2
+---
+
+## Overview
+
+The Docker Azure Integration enables developers to use native Docker commands to run applications in Azure Container Instances (ACI) when building cloud-native applications. The new experience provides a tight integration between Docker Desktop and Microsoft Azure allowing developers to quickly run applications using the Docker CLI or VS Code extension, to switch seamlessly from local development to cloud deployment.
+
+In addition, the integration between Docker and Microsoft developer technologies offers the following benefits that enable developers to:
+
+- Easily log into Azure directly from the Docker CLI
+- Set up an ACI context in one Docker command allowing you to switch from a local context to a cloud context and run applications quickly and easily
+- Simplify single container and multi-container application development using the Compose specification, allowing a developer to invoke fully Docker-compatible commands seamlessly for the first time natively within a cloud container service
+
+>**Note**
+>
+> Docker Azure Integration is currently a beta release. The commands and flags are subject to change in subsequent releases.
+{:.important}
+
+## Prerequisites
+
+To deploy Docker containers on Azure, you must meet the following requirements:
+
+1. Download and install Docker Desktop Edge version 2.3.2.0.
+
+    - Download for Mac
+    - Download for Windows
+
+    Alternatively, install the [Docker ACI Integration for Linux](#install-the-docker-aci-integration-cli-on-linux).
+
+2. Ensure you have an Azure subscription. You can get started with an [Azure free account](https://aka.ms/AA8r2pj){: target="_blank" class="_"}.
+
+## Run Docker containers on ACI
+
+Docker not only runs containers locally, but also enables developers to seamlessly deploy Docker containers on ACI using docker run or deploy multi-container applications defined in a Compose file using the `docker compose up` command.
Docker not only runs containers locally, but also enables developers to seamlessly deploy Docker containers on ACI using `docker run` or deploy multi-container applications defined in a Compose file using the `docker compose up` command.

usha-mandya

comment created time in 18 days

Pull request review commentdocker/docker.github.io

Add docs for Docker Azure integration beta

+---
+title: Deploying Docker containers on Azure
+description: Deploying Docker containers on Azure
+keywords: Docker, Azure, Integration, ACI, context, cli, deploy, containers, cloud
+toc_min: 1
+toc_max: 2
+---
+
+## Overview
+
+The Docker Azure Integration enables developers to use native Docker commands to run applications in Azure Container Instances (ACI) when building cloud-native applications. The new experience provides a tight integration between Docker Desktop and Microsoft Azure allowing developers to quickly run applications using the Docker CLI or VS Code extension, to switch seamlessly from local development to cloud deployment.
+
+In addition, the integration between Docker and Microsoft developer technologies offers the following benefits that enable developers to:
+
+- Easily log into Azure directly from the Docker CLI

If the above change is accepted:

- Easily log into Azure

usha-mandya

comment created time in 18 days

Pull request review commentdocker/docker.github.io

Add docs for Docker Azure integration beta

+---
+title: Deploying Docker containers on Azure
+description: Deploying Docker containers on Azure
+keywords: Docker, Azure, Integration, ACI, context, cli, deploy, containers, cloud

We can add Compose here

usha-mandya

comment created time in 18 days

Pull request review commentdocker/docker.github.io

Add docs for Docker Azure integration beta

+---
+title: Deploying Docker containers on Azure
+description: Deploying Docker containers on Azure
+keywords: Docker, Azure, Integration, ACI, context, cli, deploy, containers, cloud
+toc_min: 1
+toc_max: 2
+---
+
+## Overview
+
+The Docker Azure Integration enables developers to use native Docker commands to run applications in Azure Container Instances (ACI) when building cloud-native applications. The new experience provides a tight integration between Docker Desktop and Microsoft Azure allowing developers to quickly run applications using the Docker CLI or VS Code extension, to switch seamlessly from local development to cloud deployment.
+
+In addition, the integration between Docker and Microsoft developer technologies offers the following benefits that enable developers to:
In addition, the integration between Docker and Microsoft developer technologies allow developers to use the Docker CLI to:

usha-mandya

comment created time in 18 days

PR opened compose-spec/compose-ref

Reviewers
Add NOTICE file

What I did

  • Added NOTICE file so that we're Apache 2 compliant
+2 -0

0 comment

1 changed file

pr created time in 25 days

create barnchchris-crone/compose-ref

branch : add-notice

created branch time in 25 days

fork chris-crone/compose-ref

Compose specification reference implementation

https://compose-spec.io

fork in 25 days

PR opened compose-spec/compose-go

Reviewers
Add NOTICE file
+2 -0

0 comment

1 changed file

pr created time in 25 days

create barnchchris-crone/compose-go

branch : add-notice

created branch time in 25 days

fork chris-crone/compose-go

Reference library for the parsing and loading Compose files

https://compose-spec.io

fork in 25 days

PR opened compose-spec/compose-spec

Reviewers
Add NOTICE file

What this PR does / why we need it:

  • Adds a NOTICE file so that we're Apache 2 compliant
+2 -0

0 comment

1 changed file

pr created time in 25 days

push eventchris-crone/compose-spec

Christopher Crone

commit sha 92d9fa0ec32eaacdb008f4959412f066d1caf838

Add NOTICE file Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in 25 days

create barnchchris-crone/compose-spec

branch : add-notice

created branch time in 25 days

Pull request review commentmoby/buildkit

git: support for token authentication

 func git(ctx context.Context, dir string, args ...string) (*bytes.Buffer, error) 		cmd.Dir = dir // some commands like submodule require this 		buf := bytes.NewBuffer(nil) 		errbuf := bytes.NewBuffer(nil)+		cmd.Stdin = nil 		cmd.Stdout = io.MultiWriter(stdout, buf) 		cmd.Stderr = io.MultiWriter(stderr, errbuf)+		cmd.Env = []string{+			"PATH=" + os.Getenv("PATH"),+			"GIT_TERMINAL_PROMPT=0",+			//	"GIT_TRACE=1",

nit: Remove commented env var.

tonistiigi

comment created time in 25 days

Pull request review commentmoby/buildkit

secrets: allow providing secrets with env

+package secretsprovider++import (+	"context"+	"io/ioutil"+	"os"+	"runtime"+	"strings"++	"github.com/moby/buildkit/session/secrets"+	"github.com/pkg/errors"+)++type Source struct {+	ID       string+	FilePath string+	Env      string+}++func NewStore(files []Source) (secrets.SecretStore, error) {+	m := map[string]Source{}+	for _, f := range files {+		if f.ID == "" {+			return nil, errors.Errorf("secret missing ID")+		}+		if f.Env == "" && f.FilePath == "" {+			if hasEnv(f.ID) {+				f.Env = f.ID+			} else {+				f.FilePath = f.ID+			}+		}+		if f.FilePath != "" {+			fi, err := os.Stat(f.FilePath)+			if err != nil {+				return nil, errors.Wrapf(err, "failed to stat %s", f.FilePath)+			}+			if fi.Size() > MaxSecretSize {+				return nil, errors.Errorf("secret %s too big. max size 500KB", f.ID)

nit: Shouldn't hardcode 500KB in error message, should use MaxSecretSize.

tonistiigi

comment created time in 25 days

push eventcompose-spec/compose-go

Nicolas De Loof

commit sha c1485ba8712e1ad60c9f03eeac5cc5914cf5e631

Make AllowList#Error public so custom implentation can log errors Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>

view details

Nicolas De Loof

commit sha cd74fba7d57364098686241191c1eea89fb72c0c

Set resource name from key when not explicitly set by Name attribute Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>

view details

Chris Crone

commit sha fca3bb55c5ccb1db2931b662b255961530e3b18f

Merge pull request #50 from ndeloof/normalize Normalize

view details

push time in a month

PR merged compose-spec/compose-go

Normalize

Set network/volume/config/secret name to their ley in map when not explicitly set

+190 -156

0 comment

9 changed files

ndeloof

pr closed time in a month

Pull request review commentcompose-spec/compose-go

Introduce `Project` as named, merge result for a set of config files

+/*+   Copyright 2020 The Compose Specification Authors.++   Licensed under the Apache License, Version 2.0 (the "License");+   you may not use this file except in compliance with the License.+   You may obtain a copy of the License at++       http://www.apache.org/licenses/LICENSE-2.0++   Unless required by applicable law or agreed to in writing, software+   distributed under the License is distributed on an "AS IS" BASIS,+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+   See the License for the specific language governing permissions and+   limitations under the License.+*/++package compatibility++import (+	"fmt"++	"github.com/compose-spec/compose-go/errdefs"+	"github.com/pkg/errors"+)++// AllowList implement Checker interface by rejecting all attributes but those listed as "supported".+type AllowList struct {+	Supported []string+	errors    []error+}++func (c *AllowList) Errors() []error {

That makes sense to me. The linter might actually take that into account.

ndeloof

comment created time in a month

Pull request review commentcompose-spec/compose-go

Introduce `Project` as named, merge result for a set of config files

+/*+   Copyright 2020 The Compose Specification Authors.++   Licensed under the Apache License, Version 2.0 (the "License");+   you may not use this file except in compliance with the License.+   You may obtain a copy of the License at++       http://www.apache.org/licenses/LICENSE-2.0++   Unless required by applicable law or agreed to in writing, software+   distributed under the License is distributed on an "AS IS" BASIS,+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+   See the License for the specific language governing permissions and+   limitations under the License.+*/++package compatibility++import (+	"fmt"++	"github.com/compose-spec/compose-go/types"+)++func (c *AllowList) CheckDeploy(service *types.ServiceConfig) bool {+	if !c.supported("deploy") && service.Deploy != nil {+		service.Deploy = nil+		c.error("deploy")+		return false+	}+	return true+}++func (c *AllowList) CheckDeployMode(config *types.DeployConfig) {+	if !c.supported("services.deploy.mode") && config.Mode != "" {+		config.Mode = ""+		c.error("services.deploy.mode")+	}+}+func (c *AllowList) CheckDeployReplicas(config *types.DeployConfig) {+	if !c.supported("services.deploy.replicas") && config.Replicas != nil {+		config.Replicas = nil+		c.error("services.deploy.replicas")+	}+}+func (c *AllowList) CheckDeployLabels(config *types.DeployConfig) {+	if !c.supported("services.deploy.labels") && len(config.Labels) != 0 {+		config.Labels = nil+		c.error("services.deploy.labels")+	}+}++const (+	UpdateConfigUpdate   = "update_config"+	UpdateConfigRollback = "rolback_config"+)++func (c *AllowList) CheckDeployUpdateConfig(config *types.DeployConfig) bool {+	if !c.supported("services.deploy.update_config") {+		config.UpdateConfig = nil+		c.error("services.deploy.update_config")+		return false+	}+	return true+}++func (c *AllowList) CheckDeployRollbackConfig(config *types.DeployConfig) bool {+	if !c.supported("services.deploy.rollback_config") {+		config.RollbackConfig = nil+		c.error("services.deploy.rollback_config")+		return false+	}+	return true+}++func (c *AllowList) CheckUpdateConfigParallelism(s string, config *types.UpdateConfig) {+	k := fmt.Sprintf("services.deploy.%s.parallelism", s)+	if !c.supported(k) && config.Parallelism != nil {+		config.Parallelism = nil+		c.error(k)+	}+}+func (c *AllowList) CheckUpdateConfigDelay(s string, config *types.UpdateConfig) {+	k := fmt.Sprintf("services.deploy.%s.delay", s)+	if !c.supported(k) && config.Delay != 0 {+		config.Delay = 0+		c.error(k)+	}+}+func (c *AllowList) CheckUpdateConfigFailureAction(s string, config *types.UpdateConfig) {+	k := fmt.Sprintf("services.deploy.%s.failure_action", s)+	if !c.supported(k) && config.FailureAction != "" {+		config.FailureAction = ""+		c.error(k)+	}+}+func (c *AllowList) CheckUpdateConfigMonitor(s string, config *types.UpdateConfig) {+	k := fmt.Sprintf("services.deploy.%s.monitor", s)+	if !c.supported(k) && config.Monitor != 0 {+		config.Monitor = 0+		c.error(k)+	}+}+func (c *AllowList) CheckUpdateConfigMaxFailureRatio(s string, config *types.UpdateConfig) {+	k := fmt.Sprintf("services.deploy.%s.max_failure_ratio", s)+	if !c.supported(k) && config.MaxFailureRatio != 0 {+		config.MaxFailureRatio = 0+		c.error(k)+	}+}+func (c *AllowList) CheckUpdateConfigOrder(s string, config *types.UpdateConfig) {+	k := fmt.Sprintf("services.deploy.%s.order", s)+	if !c.supported(k) && config.Order != "" {+		config.Order = ""+		c.error(k)+	}+}++const (+	ResourceLimits       = "limits"

Where are these consts used?

ndeloof

comment created time in a month

Pull request review commentcompose-spec/compose-go

Introduce `Project` as named, merge result for a set of config files

+/*+   Copyright 2020 The Compose Specification Authors.++   Licensed under the Apache License, Version 2.0 (the "License");+   you may not use this file except in compliance with the License.+   You may obtain a copy of the License at++       http://www.apache.org/licenses/LICENSE-2.0++   Unless required by applicable law or agreed to in writing, software+   distributed under the License is distributed on an "AS IS" BASIS,+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+   See the License for the specific language governing permissions and+   limitations under the License.+*/++package compatibility++import (+	"fmt"++	"github.com/compose-spec/compose-go/errdefs"+	"github.com/pkg/errors"+)++// AllowList implement Checker interface by rejecting all attributes but those listed as "supported".+type AllowList struct {+	Supported []string+	errors    []error+}++func (c *AllowList) Errors() []error {

Public function missing a comment, we should add a linter to pick things like this up (not in this PR).

// Errors returns the list of errors encountered when checking against the allow list
func (c *AllowList) Errors() []error {
ndeloof

comment created time in a month

Pull request review commentcompose-spec/compose-go

Introduce `Project` as named, merge result for a set of config files

+/*+   Copyright 2020 The Compose Specification Authors.++   Licensed under the Apache License, Version 2.0 (the "License");+   you may not use this file except in compliance with the License.+   You may obtain a copy of the License at++       http://www.apache.org/licenses/LICENSE-2.0++   Unless required by applicable law or agreed to in writing, software+   distributed under the License is distributed on an "AS IS" BASIS,+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+   See the License for the specific language governing permissions and+   limitations under the License.+*/++package compatibility++import (+	"testing"++	"github.com/compose-spec/compose-go/errdefs"+	"github.com/compose-spec/compose-go/loader"+	"github.com/compose-spec/compose-go/types"+	"gotest.tools/v3/assert"+)++func TestWhiteList(t *testing.T) {
func TestAllowList(t *testing.T) {
ndeloof

comment created time in a month

Pull request review commentcompose-spec/compose-go

Introduce `Project` as named, merge result for a set of config files

+/*+   Copyright 2020 The Compose Specification Authors.++   Licensed under the Apache License, Version 2.0 (the "License");+   you may not use this file except in compliance with the License.+   You may obtain a copy of the License at++       http://www.apache.org/licenses/LICENSE-2.0++   Unless required by applicable law or agreed to in writing, software+   distributed under the License is distributed on an "AS IS" BASIS,+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+   See the License for the specific language governing permissions and+   limitations under the License.+*/++package compatibility++import (+	"fmt"++	"github.com/compose-spec/compose-go/errdefs"+	"github.com/pkg/errors"+)++// AllowList implement Checker interface by rejecting all attributes but those listed as "supported".
// AllowList implements the Checker interface by rejecting all attributes that are not listed as "supported".
ndeloof

comment created time in a month

Pull request review commentcompose-spec/compose-go

Introduce `Project` as named, merge result for a set of config files

+/*+   Copyright 2020 The Compose Specification Authors.++   Licensed under the Apache License, Version 2.0 (the "License");+   you may not use this file except in compliance with the License.+   You may obtain a copy of the License at++       http://www.apache.org/licenses/LICENSE-2.0++   Unless required by applicable law or agreed to in writing, software+   distributed under the License is distributed on an "AS IS" BASIS,+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+   See the License for the specific language governing permissions and+   limitations under the License.+*/++package compatibility++import (+	"fmt"++	"github.com/compose-spec/compose-go/types"+)++func (c *AllowList) CheckDeploy(service *types.ServiceConfig) bool {+	if !c.supported("deploy") && service.Deploy != nil {+		service.Deploy = nil+		c.error("deploy")+		return false+	}+	return true+}++func (c *AllowList) CheckDeployMode(config *types.DeployConfig) {+	if !c.supported("services.deploy.mode") && config.Mode != "" {+		config.Mode = ""+		c.error("services.deploy.mode")+	}+}+func (c *AllowList) CheckDeployReplicas(config *types.DeployConfig) {+	if !c.supported("services.deploy.replicas") && config.Replicas != nil {+		config.Replicas = nil+		c.error("services.deploy.replicas")+	}+}+func (c *AllowList) CheckDeployLabels(config *types.DeployConfig) {+	if !c.supported("services.deploy.labels") && len(config.Labels) != 0 {+		config.Labels = nil+		c.error("services.deploy.labels")+	}+}++const (+	UpdateConfigUpdate   = "update_config"

Where are these consts used?

ndeloof

comment created time in a month

Pull request review commentcompose-spec/compose-go

Introduce `Project` as named, merge result for a set of config files

+/*+   Copyright 2020 The Compose Specification Authors.++   Licensed under the Apache License, Version 2.0 (the "License");+   you may not use this file except in compliance with the License.+   You may obtain a copy of the License at++       http://www.apache.org/licenses/LICENSE-2.0++   Unless required by applicable law or agreed to in writing, software+   distributed under the License is distributed on an "AS IS" BASIS,+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+   See the License for the specific language governing permissions and+   limitations under the License.+*/++package cli++import (+	"os"+	"testing"++	"gotest.tools/v3/assert"+)++func Test_project_name(t *testing.T) {

Function names should be camelcase

ndeloof

comment created time in a month

Pull request review commentcompose-spec/compose-go

Introduce `Project` as named, merge result for a set of config files

+/*+   Copyright 2020 The Compose Specification Authors.++   Licensed under the Apache License, Version 2.0 (the "License");+   you may not use this file except in compliance with the License.+   You may obtain a copy of the License at++       http://www.apache.org/licenses/LICENSE-2.0++   Unless required by applicable law or agreed to in writing, software+   distributed under the License is distributed on an "AS IS" BASIS,+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+   See the License for the specific language governing permissions and+   limitations under the License.+*/++package cli++import (+	"os"+	"testing"++	"gotest.tools/v3/assert"+)++func Test_project_name(t *testing.T) {+	p, err := ProjectFromOptions(&ProjectOptions{+		Name:        "my_project",+		ConfigPaths: []string{"testdata/simple/compose.yaml"},+	})+	assert.NilError(t, err)+	assert.Equal(t, p.Name, "my_project")++	p, err = ProjectFromOptions(&ProjectOptions{+		ConfigPaths: []string{"testdata/simple/compose.yaml"},+	})+	assert.NilError(t, err)+	assert.Equal(t, p.Name, "simple")++	os.Setenv("COMPOSE_PROJECT_NAME", "my_project_from_env")

We should unset this so that other tests are impacted.

	os.Setenv("COMPOSE_PROJECT_NAME", "my_project_from_env")
	defer os.Unsetenv("COMPOSE_PROJECT_NAME")

For later: We can change ProjectFromOptions to take the env vars as a parameter so that we don't need to set the env var in the test. That'll allow us to run them safely in parallel.

ndeloof

comment created time in a month

Pull request review commentcompose-spec/compose-go

Introduce `Project` as named, merge result for a set of config files

+/*+   Copyright 2020 The Compose Specification Authors.++   Licensed under the Apache License, Version 2.0 (the "License");+   you may not use this file except in compliance with the License.+   You may obtain a copy of the License at++       http://www.apache.org/licenses/LICENSE-2.0++   Unless required by applicable law or agreed to in writing, software+   distributed under the License is distributed on an "AS IS" BASIS,+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+   See the License for the specific language governing permissions and+   limitations under the License.+*/++package cli++import (+	"io/ioutil"+	"os"+	"path/filepath"+	"strings"++	"github.com/compose-spec/compose-go/errdefs"+	"github.com/pkg/errors"++	"github.com/compose-spec/compose-go/loader"+	"github.com/compose-spec/compose-go/types"+	"github.com/sirupsen/logrus"+)++// ProjectOptions groups the command line options recommended for a Compose implementation+type ProjectOptions struct {+	ConfigPaths []string+	Name        string+}++// DefaultFileNames defines the Compose file names for auto-discovery (in order of preference)+var DefaultFileNames = []string{"compose.yaml", "compose.yml", "docker-compose.yml", "docker-compose.yaml"}++const (+	ComposeProjectName   = "COMPOSE_PROJECT_NAME"+	ComposeFileSeparator = "COMPOSE_FILE_SEPARATOR"+	ComposeFilePath      = "COMPOSE_FILE"+)++// ProjectFromOptions load a compose project based on command line options+func ProjectFromOptions(options *ProjectOptions) (*types.Project, error) {+	configPaths, err := getConfigPathsFromOptions(options)+	if err != nil {+		return nil, err+	}++	configs, err := parseConfigs(configPaths)+	if err != nil {+		return nil, err+	}++	return loader.Load(types.ConfigDetails{+		ConfigFiles: configs,+		Environment: environment(),+	}, func(opts *loader.Options) {+		if options.Name != "" {+			opts.Name = options.Name+		} else if nameFromEnv, ok := os.LookupEnv(ComposeProjectName); ok {+			opts.Name = nameFromEnv+		}+	})+}++// getConfigPathsFromOptions retrieves the config files for project based on project options+func getConfigPathsFromOptions(options *ProjectOptions) ([]string, error) {+	paths := []string{}+	pwd, err := os.Getwd()+	if err != nil {+		return nil, err+	}++	if len(options.ConfigPaths) != 0 {+		for _, f := range options.ConfigPaths {+			if f == "-" {+				paths = append(paths, f)+				continue+			}+			if !filepath.IsAbs(f) {+				f = filepath.Join(pwd, f)+			}+			if _, err := os.Stat(f); err != nil {+				return nil, err+			}+			paths = append(paths, f)+		}+		return paths, nil+	}++	sep := os.Getenv(ComposeFileSeparator)+	if sep == "" {+		sep = string(os.PathListSeparator)+	}+	f := os.Getenv(ComposeFilePath)+	if f != "" {+		return strings.Split(f, sep), nil+	}++	for {+		candidates := []string{}+		for _, n := range DefaultFileNames {+			f := filepath.Join(pwd, n)+			if _, err := os.Stat(f); err == nil {+				candidates = append(candidates, f)+			}+		}+		if len(candidates) > 0 {+			winner := candidates[0]+			if len(candidates) > 1 {+				logrus.Warnf("Found multiple config files with supported names: %s", strings.Join(candidates, ", "))+				logrus.Warnf("Using %s\n", winner)

Don't think we need the \n here.

				logrus.Warnf("Using %s", winner)
ndeloof

comment created time in a month

Pull request review commentcompose-spec/compose-go

Introduce `Project` as named, merge result for a set of config files

+# Maintenance++Compose-go library has to be kept up-to-date with approved changes in [Compose-spec](https://github.com/compose-spec/compose-spec).+This typically require, as we define new attributes to be added to the spec++1. Update `schema` to latest version from compose-spec   +1. Create the matching struct/field in `types`  +1. Create the matching `CheckXX` method in `compatibility`
1. Creating the matching `CheckXX` method in `compatibility`
ndeloof

comment created time in a month

Pull request review commentcompose-spec/compose-go

Introduce `Project` as named, merge result for a set of config files

+# Maintenance++Compose-go library has to be kept up-to-date with approved changes in [Compose-spec](https://github.com/compose-spec/compose-spec).+This typically require, as we define new attributes to be added to the spec++1. Update `schema` to latest version from compose-spec   
1. Updating `schema` to latest version from compose-spec
ndeloof

comment created time in a month

Pull request review commentcompose-spec/compose-go

Introduce `Project` as named, merge result for a set of config files

+# Maintenance++Compose-go library has to be kept up-to-date with approved changes in [Compose-spec](https://github.com/compose-spec/compose-spec).+This typically require, as we define new attributes to be added to the spec++1. Update `schema` to latest version from compose-spec   +1. Create the matching struct/field in `types`  +1. Create the matching `CheckXX` method in `compatibility`+1. If new attribute replaces a legacy one we want to deprecate, create the adequate logic in `normalize.go`
1. If the new attribute replaces a legacy one we want to deprecate, create the adequate logic in `normalize.go`
ndeloof

comment created time in a month

Pull request review commentcompose-spec/compose-go

Introduce `Project` as named, merge result for a set of config files

+# Maintenance++Compose-go library has to be kept up-to-date with approved changes in [Compose-spec](https://github.com/compose-spec/compose-spec).+This typically require, as we define new attributes to be added to the spec++1. Update `schema` to latest version from compose-spec   +1. Create the matching struct/field in `types`  
1. Creating the matching struct/field in `types`
ndeloof

comment created time in a month

Pull request review commentcompose-spec/compose-go

Introduce `Project` as named, merge result for a set of config files

+/*+   Copyright 2020 The Compose Specification Authors.++   Licensed under the Apache License, Version 2.0 (the "License");+   you may not use this file except in compliance with the License.+   You may obtain a copy of the License at++       http://www.apache.org/licenses/LICENSE-2.0++   Unless required by applicable law or agreed to in writing, software+   distributed under the License is distributed on an "AS IS" BASIS,+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+   See the License for the specific language governing permissions and+   limitations under the License.+*/++package cli++import (+	"io/ioutil"+	"os"+	"path/filepath"+	"strings"++	"github.com/compose-spec/compose-go/errdefs"+	"github.com/pkg/errors"+

Is there a reason we're splitting the imports here?

ndeloof

comment created time in a month

Pull request review commentcompose-spec/compose-go

Introduce `Project` as named, merge result for a set of config files

+# Maintenance++Compose-go library has to be kept up-to-date with approved changes in [Compose-spec](https://github.com/compose-spec/compose-spec).
The compose-go library has to be kept up-to-date with approved changes in the [Compose specification](https://github.com/compose-spec/compose-spec).
ndeloof

comment created time in a month

Pull request review commentcompose-spec/compose-go

Introduce `Project` as named, merge result for a set of config files

+# Maintenance++Compose-go library has to be kept up-to-date with approved changes in [Compose-spec](https://github.com/compose-spec/compose-spec).+This typically require, as we define new attributes to be added to the spec
As we define new attributes to be added to the spec, this typically requires:
ndeloof

comment created time in a month

Pull request review commentcompose-spec/compose-go

Introduce `Project` as named, merge result for a set of config files

+# Maintenance++Compose-go library has to be kept up-to-date with approved changes in [Compose-spec](https://github.com/compose-spec/compose-spec).
The compose-go library has to be kept up-to-date with approved changes in the [Compose spec](https://github.com/compose-spec/compose-spec).
ndeloof

comment created time in a month

push eventdocker/build-push-action

Konosuke Kachi

commit sha 68257a7f8a6d40504c1d311816a417f9762c979e

Fix typo Signed-off-by: Konosuke Kachi <github@s.k-kachi.net>

view details

Chris Crone

commit sha 7cb863f593fcd9d1ef0f6dfe95683f703ca5b083

Merge pull request #45 from gkkachi/fix-typo-gcr Fix typo

view details

push time in a month

PR merged docker/build-push-action

Fix typo

CGR -> GCR

+1 -1

0 comment

1 changed file

gkkachi

pr closed time in a month

issue commentdocker/for-win

Slow command execution while on slow internet

This might be this issue: https://github.com/docker/cli/issues/2420

The latest Desktop does not yet ship the latest CLI so I'll get you a build to test if it is fixed

mikesir87

comment created time in a month

create barnchchris-crone/compose-community

branch : community-meeting-2020-06-04

created branch time in a month

create barnchchris-crone/compose-community

branch : community-meeting-2020-05-21

created branch time in a month

create barnchchris-crone/compose-community

branch : community-meeting-2020-05-07

created branch time in a month

Pull request review commentcnabio/cnab-spec

Add initial draft for registry specification

 This specification describes how CNAB bundles can be stored inside of OCI Regist This specification, the CNAB Registries specification, is not part of the CNAB Core specification. An implementation of CNAB Core MAY NOT implement this specification, yet still claim compliance with CNAB Core. A CNAB implementation MUST NOT claim to be CNAB Registries-compliant unless it meets this specification.  > Previous versions of the CNAB Core draft specification included a repository protocol. That work is completely superseded by this specification.++This specification is distinct from the CNAB Core specification. An implementation may comply with the CNAB Core specification, and yet not comply with this specification.++The keywords MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, MAY, and OPTIONAL in this document are to be interpreted as described in [RFC 2119](https://www.ietf.org/rfc/rfc2119.txt). The use of these keywords in this document are statements about how a CNAB implementation may fulfill the CNAB registry storage specification only.++The CNAB Core 1.0 specification (CNAB1) does not dictate how bundles should be distributed. This is intentional, so that organizations that already have a way of distributing artifacts may continue to use it.+This document, the CNAB Registries specification, is not part of the core specification, and an implementation of CNAB Core MAY NOT implement it, yet still claim compliance with CNAB Core. A CNAB implementation MUST NOT claim to be CNAB Registries compliant unless it meets this specification.++This specification proposes the use of [OCI registries][oci-org] to distribute CNAB artifacts.++## Approach++<!--

+1 We can create issues against the spec for things that haven't been defined yet like annotations, and storing images for air-gapped use.

radu-matei

comment created time in a month

Pull request review commentcompose-spec/compose-go

Introduce `Project` as named, merge result for a set of config files

+/*+   Copyright 2020 The Compose Specification Authors.++   Licensed under the Apache License, Version 2.0 (the "License");+   you may not use this file except in compliance with the License.+   You may obtain a copy of the License at++       http://www.apache.org/licenses/LICENSE-2.0++   Unless required by applicable law or agreed to in writing, software+   distributed under the License is distributed on an "AS IS" BASIS,+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+   See the License for the specific language governing permissions and+   limitations under the License.+*/++package compatibility++import "github.com/compose-spec/compose-go/types"++type Checker interface {

Looking at the tests, consuming this seems to be quite elegant. The only thing that would make it better is consts instead of free strings.

If we have a checklist on new additions to the spect that includes adding the required check code then this is fine.

I don't know of any libraries or tools autogenerating from JSON schema. Maybe @thaJeztah or @silvin-lubecki will though?

ndeloof

comment created time in a month

push eventchris-crone/compose

Christopher Crone

commit sha 5254d7aca2fe4105722692e9998b01afd4659233

README: Remove Python 2 deprecation message Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in a month

PR opened docker/compose

Reviewers
Remove Python 2 deprecation

Remove the Python 2 deprecation notice now that Python 2 has been deprecated

+4 -5

0 comment

1 changed file

pr created time in a month

create barnchchris-crone/compose

branch : readme-remove-python2-deprecation

created branch time in a month

push eventchris-crone/containerized-go-dev

Christopher Crone

commit sha bff6023b1a91bcf26dffa697858a96b2e3d295ca

Initial commit

view details

push time in a month

push eventchris-crone/containerized-go-dev

Christopher Crone

commit sha b41062f6ff5f49e1bac0362eceef051f6e5c5963

Initial commit

view details

push time in a month

Pull request review commentcompose-spec/compose-go

Introduce `Project` as named, merge result for a set of config files

+/*+   Copyright 2020 The Compose Specification Authors.++   Licensed under the Apache License, Version 2.0 (the "License");+   you may not use this file except in compliance with the License.+   You may obtain a copy of the License at++       http://www.apache.org/licenses/LICENSE-2.0++   Unless required by applicable law or agreed to in writing, software+   distributed under the License is distributed on an "AS IS" BASIS,+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+   See the License for the specific language governing permissions and+   limitations under the License.+*/++package compatibility++import "github.com/compose-spec/compose-go/types"++type Checker interface {

I'm a little worried about manually maintaining all of these.

Would it make more sense to only allow checking a service, network, volume (for example) and let the consumer of the library dive down into the exact specifics?

ndeloof

comment created time in a month

push eventchris-crone/containerized-go-dev

Christopher Crone

commit sha 7ee080e1ac7e230330373f6869e266914b8afb89

Initial commit

view details

push time in a month

push eventchris-crone/containerized-go-dev

Christopher Crone

commit sha 741b676d6f54e633741036b057b001a8e0e15a78

Initial commit

view details

push time in a month

push eventchris-crone/containerized-go-dev

Christopher Crone

commit sha 5a1ea4283f3162876c42a6ea9186f662ca3cce34

Initial commit

view details

push time in a month

push eventchris-crone/containerized-go-dev

Christopher Crone

commit sha 6da2ec0efff69ca539485b906a0d657749e2c1fb

Initial commit

view details

push time in a month

push eventchris-crone/containerized-go-dev

Christopher Crone

commit sha 83d056c4fa87c01b41888b65f95d6d6747836958

Initial commit

view details

push time in a month

push eventchris-crone/containerized-go-dev

Christopher Crone

commit sha 16e0d14994a81a10de1955d309065d73131aaa66

Initial commit

view details

push time in a month

push eventchris-crone/containerized-go-dev

Christopher Crone

commit sha 0fb54f3976cb5ce8f6806132acf39bc7dd819a44

Initial commit

view details

push time in a month

push eventchris-crone/containerized-go-dev

Christopher Crone

commit sha 70bb5b06ce1308ed79130e5d748b0763ed8474de

Initial commit

view details

push time in a month

push eventchris-crone/containerized-go-dev

Christopher Crone

commit sha bfed66d436bba62a19cadef64eda56ee6e6ddc54

Initial commit

view details

push time in a month

push eventchris-crone/containerized-go-dev

Christopher Crone

commit sha 574947de4239d16f3cb6be4b8259262fb379d056

Initial commit

view details

push time in a month

push eventchris-crone/containerized-go-dev

Christopher Crone

commit sha 1ae5cb98e1fb80ee442abe4098e0c923fef4942e

Initial commit

view details

push time in a month

push eventchris-crone/containerized-go-dev

Christopher Crone

commit sha a13528e5ebbcd0189d2cfb12008cada498c136f5

Initial commit

view details

push time in a month

push eventchris-crone/containerized-go-dev

Christopher Crone

commit sha 3ecf0a6a9247b5ed5763f5977d1e26465473c733

Initial commit

view details

push time in a month

create barnchchris-crone/containerized-go-dev

branch : master

created branch time in a month

more