@@ -167,53 +167,79 @@ You can test the Coder dev container integration and features with these starter
167
167
168
168
<details ><summary >Docker-based template (privileged)</summary >
169
169
170
+ This version uses a Docker-in-Docker image, so it works even if the host doesn’t expose a Docker socket.
171
+
170
172
``` terraform
171
- terraform {
173
+ tterraform {
172
174
required_providers {
173
- coder = { source = "coder/coder" }
174
- docker = { source = "kreuzwerker/docker" }
175
+ coder = {
176
+ source = "coder/coder"
177
+ }
178
+ docker = {
179
+ source = "kreuzwerker/docker"
180
+ }
175
181
}
176
182
}
177
183
178
- data "coder_workspace" "me" {}
179
- data "coder_workspace_owner" "me" {}
184
+ provider "coder" {}
185
+
186
+ data "coder_workspace" "me" {}
187
+ data "coder_workspace_owner" "me" {}
188
+
189
+ resource "docker_container" "workspace" {
190
+ count = data.coder_workspace.me.start_count
191
+ image = "codercom/enterprise-base:ubuntu" # includes Coder agent
192
+ name = "coder-${data.coder_workspace_owner.me.name}-${lower(data.coder_workspace.me.name)}"
193
+
194
+ # share host Docker
195
+ volumes {
196
+ host_path = "/var/run/docker.sock"
197
+ container_path = "/var/run/docker.sock"
198
+ }
199
+
200
+ must_run = true # keep container alive
201
+
202
+ env = [
203
+ "CODER_AGENT_TOKEN=${coder_agent.main.token}",
204
+ "CODER_AGENT_URL=${data.coder_workspace.me.access_url}" # lets built-in entrypoint phone home
205
+ ]
206
+ }
180
207
181
208
resource "coder_agent" "main" {
182
209
os = "linux"
183
210
arch = "amd64"
184
-
185
- startup_script_behavior = "blocking"
186
- startup_script = "sudo service docker start"
187
- shutdown_script = "sudo service docker stop"
188
211
}
189
212
190
- module "devcontainers_cli" {
213
+ # install node
214
+ module "nodejs" {
191
215
count = data.coder_workspace.me.start_count
192
- source = "dev.registry.coder.com/modules/devcontainers-cli /coder"
216
+ source = "dev.registry.coder.com/modules/nodejs /coder"
193
217
agent_id = coder_agent.main.id
194
218
}
195
219
220
+ module "devcontainers_cli" {
221
+ count = data.coder_workspace.me.start_count
222
+ source = "dev.registry.coder.com/modules/devcontainers-cli/coder"
223
+ agent_id = coder_agent.main.id
224
+ depends_on = [module.nodejs] # npm first
225
+ }
226
+
227
+ # clone a repo
196
228
module "git_clone" {
197
229
count = data.coder_workspace.me.start_count
198
230
source = "dev.registry.coder.com/modules/git-clone/coder"
199
231
agent_id = coder_agent.main.id
200
- url = "https://github.com/example/project .git"
201
- base_dir = "/home/coder/project"
232
+ url = "https://github.com/devcontainers/template-starter .git"
233
+ base_dir = "/home/coder/project"
202
234
}
203
235
236
+ # launch the Dev Container
204
237
resource "coder_devcontainer" "project" {
205
238
count = data.coder_workspace.me.start_count
206
239
agent_id = coder_agent.main.id
207
240
workspace_folder = "/home/coder/project/${module.git_clone[0].folder_name}"
208
241
depends_on = [module.git_clone]
209
242
}
210
-
211
- resource "docker_container" "workspace" {
212
- count = data.coder_workspace.me.start_count
213
- image = "codercom/enterprise-node:ubuntu"
214
- name = "coder-${data.coder_workspace_owner.me.name}-${lower(data.coder_workspace.me.name)}"
215
- privileged = true # or mount /var/run/docker.sock
216
- }
217
243
```
218
244
219
245
</details >
@@ -249,7 +275,7 @@ module "git_clone" {
249
275
count = data.coder_workspace.me.start_count
250
276
source = "dev.registry.coder.com/modules/git-clone/coder"
251
277
agent_id = coder_agent.main.id
252
- url = "https://github.com/example/project .git"
278
+ url = "https://github.com/coder/coder .git"
253
279
base_dir = "/home/coder/project"
254
280
}
255
281